
=head1 NAME (O)

ShiftJIS::CP932::MapUTF - Microsoft CP-932UnicodeƂ̕ϊ

=head1 Tv

    use ShiftJIS::CP932::MapUTF qw(:all);

    $utf8_string  = cp932_to_utf8($cp932_string);
    $cp932_string = utf8_to_cp932($utf8_string);

=head1 

}CN\tgEBhEY (Microsoft Windows) R[hy[W 932 (CP-932)
̃e[u 7915 Ȃ܂B

    JIS X 0201 oCgi191 j
    JIS X 0208 oCgi6879 j
    NECꕶi83 A13j
    NECIIBMgi374 A89`92j
    IBMgi388 A115`119j

̕\́AϊłȂd`܂ł܂B
̓d`̓x_[iNEC  IBMj`̊ĝ߂łB
Ⴆ΁AUnicode  C<U+2252> ɑΉt镶͓܂B
܂AJIS X 0208  C<0x81e0>  NEC ꕶ C<0x8790> łB

ہACP-932  7915  Unicode  7517 ɑΉtȂ΂Ȃ܂B
̂߁A398 ̉ϊłȂΉ֌W݂܂B

̃W[́ACP-932  Unicode ɁA܂A
Unicode  CP-932 ɁAK؂ɕϊ֐񋟂܂B

=head2 CP-932  Unicode ւ̕ϊ

t@X̏ꍇA C<SJIS_CALLBACK> ƂāA
Unicode ւ̑ΉȂ CP-932 ̏ɗp܂B
(C<STRING> Ƀt@X^邱Ƃ͂ł܂B)

C<SJIS_CALLBACK> ^ĂꍇA
 C<STRING> Ƃėp܂B
ȂΑ C<STRING> ɂȂ܂B

 C<SJIS_CALLBACK> ^ĂȂꍇA
Unicode ւ̑ΉȂ CP-932 ͖قč폜A
͈oCg΂܂B
C<SJIS_CALLBACK> ƂāAɋ󕶎Ԃ
R[ht@X (C<sub {''}>) nꂽ̂悤ɓ삵܂B

̂ƂAC<SJIS_CALLBACK> ƂẮA
R[ht@X݂̂g܂B
R[ht@X̕Ԃl}bsÔȂ̑ɑ}܂B

R[ht@X C<SJIS_CALLBACK> ́Aȏ̈ƂƂ
Ăяo܂B}bsÔȂIȓoCg
ioCĝ݂̈oCg̕j̏ꍇA
͖`liC<undef>jɂȂA
̓oCg\ȂlɂȂ܂B
łȂ΁ÁA\ɂȂ܂B

ftHgł́AIȓoCǵAiC<STRING>j̖ɂ̂
\A̐擪rɂ͌܂
iC<SJIS_OPTION>  C<'t'> QƂ̂ƁjB



    my $sjis_callback = sub {
        my ($char, $byte) = @_;
        return function($char) if defined $char;
        die sprintf "found partial byte 0x%02x", $byte;
    };

L̗ŁAC<$char> ƂẮAC<"\x80">, C<"\x82\xf2">, C<"\xfc\xfc">,
C<"\xff"> Ȃǂ蓾܂B

C<SJIS_CALLBACK> ̕ԂĺAϊ̌`ɍ킹Ȃ΂Ȃ܂B
Ⴆ΁AC<cp932_to_utf16be()> ƂƂ UTF-8 Ԃ
C<SJIS_CALLBACK> gĂ͂܂B
܂AUTF ƂɁAC<SJIS_CALLBACK> pӂKv܂B

C<SJIS_OPTION>  C<STRING> ̌ɂƂł܂B
 C<'tg'>  C<'gst'> ̂悤ɑgݍ킹邱Ƃ
ł܂i͔CӂłjB

    'g'    CP-932 Oi[U`j[0xF040`0xF9FC (95`114)] 
           Unicode  PUA [0xE000`0xE757] ɕϊ܂i1880 jB

    's'    CP-932 `̈oCgȉ̂悤ɕϊ܂B
           0x80 => U+0080,  0xA0 => U+F8F0,
           0xFD => U+F8F1,  0xFE => U+F8F2,  0xFF => U+F8F3.

    't'    oCg͈̔ [0x40..0x7E, 0x80..0xFC] `FbN܂B
           Ⴆ "\x81\x39" ̓ftHgł͖`̓oCg
           ݂Ȃ܂A't' pƁAoCg 0x81 ̌
           oCg "\x39" ̂Ƃ݂Ȃ܂B

=over 4

=item C<cp932_to_utf8([SJIS_CALLBACK,] STRING [, SJIS_OPTION])>

CP-932  UTF-8 ɕϊ܂B

=item C<cp932_to_unicode([SJIS_CALLBACK,] STRING [, SJIS_OPTION])>

CP-932  Unicode ɕϊ܂B
iC<SVf_UTF8> tOt Perl̓`, F<perlunicode> QƁBj

B<̊֐ Perl 5.6.1 ȍ~A XS łł̂ݒ񋟂܂B>

=item C<cp932_to_utf16le([SJIS_CALLBACK,] STRING [, SJIS_OPTION])>

CP-932  UTF-16LE ɕϊ܂B

=item C<cp932_to_utf16be([SJIS_CALLBACK,] STRING [, SJIS_OPTION])>

CP-932  UTF-16BE ɕϊ܂B

=item C<cp932_to_utf32le([SJIS_CALLBACK,] STRING [, SJIS_OPTION])>

CP-932  UTF-32LE ɕϊ܂B

=item C<cp932_to_utf32be([SJIS_CALLBACK,] STRING [, SJIS_OPTION])>

CP-932  UTF-32BE ɕϊ܂B

=back

=head2 Unicode  CP-932 ւ̕ϊ

d`ׂ͂āAMicrosoft PRB Q170559 ɏ]ĕϊ܂B
Ⴆ C<U+2252>  C<"\x87\x90"> ł͂Ȃ C<"\x81\xE0"> ɕϊ܂B

t@X̏ꍇA C<UNICODE_CALLBACK> ƂāA
CP-932 ւ̑ΉȂ Unicode ̏ɗp܂B
(C<STRING> Ƀt@X^邱Ƃ͂ł܂B)

C<UNICODE_CALLBACK> ^ĂꍇA
 C<STRING> Ƃėp܂B
ȂΑ C<STRING> ɂȂ܂B

 C<UNICODE_CALLBACK> ^ĂȂꍇA
CP-932 ւ̑ΉȂ Unicode ͖قč폜A
܂A͈oCg΂܂B
C<UNICODE_CALLBACK> ƂāAɋ󕶎Ԃ
R[ht@X (C<sub {''}>) nꂽ̂悤ɓ삵܂B

̂ƂAC<UNICODE_CALLBACK> ƂẮA
R[ht@X݂̂g܂B
̃R[ht@X̕Ԃl
}bsÔȂ̑ɑ}܂B

R[ht@X C<UNICODE_CALLBACK> ́A
ȏ̈ƂƂɌĂяo܂B}bsÔȂ
IisȃoCgj̏ꍇA͖`liC<undef>jɂȂA
̓oCg\ȂlɂȂ܂B
łȂ΁ÁAUnicode̕ʒu\
ȂlɂȂ܂B

Ⴆ΁ACP-932 ւ̑ΉȂ HTML 4.01 ̐lQƂ
ϊ@܂B

    sub toHexNCR {
        my ($char, $byte) = @_;
        return sprintf("&#x%x;", $char) if defined $char;
        die sprintf "illegal byte 0x%02x was found", $byte;
    }

    $cp932 = utf8_to_cp932   (\&toHexNCR, $utf8_string);
    $cp932 = unicode_to_cp932(\&toHexNCR, $unicode_string);
    $cp932 = utf16le_to_cp932(\&toHexNCR, $utf16le_string);

C<UNICODE_CALLBACK> ̕Ԃl CP-932 ƂĐKv܂B

C<UNICODE_OPTION>  C<STRING> ̌ɂƂł܂B
 C<'fg'>  C<'gsf'> ̂悤ɑgݍ킹邱Ƃ
ł܂i͔CӂłjB

    'g'    CP-932 Oi[U`j[0xF040`0xF9FC (95`114)] 
           Unicode  PUA [0xE000`0xE757] ϊ܂i1880 jB

    's'    CP-932 `̈oCg̑Ήtǉ܂B
           U+0080 => 0x80,  U+F8F0 => 0xA0,
           U+F8F1 => 0xFD,  U+F8F2 => 0xFE,  U+F8F3 => 0xFF.

    'f'    Unicode  CP-932 ւ̊̑pIȕϊ (fallbacks) 
           ǉ܂B}bsOǉ镶́Alatin-1 ̈
           [U+00A0..U+00FF] ̂̊̕ƁÃ [U+3094,
           Љ̃ (0x8394) ɂȂ܂] łB

=over 4

=item C<utf8_to_cp932([UNICODE_CALLBACK,] STRING [, UNICODE_OPTION])>

UTF-8  CP-932 ɕϊ܂B

=item C<unicode_to_cp932([UNICODE_CALLBACK,] STRING [, UNICODE_OPTION])>

Unicode  CP-932 ɕϊ܂B

 B<Unicode> ́APerl ̓`iF<perlunicode> QƁjB
C<SVf_UTF8> tOtłȂꍇAISO 8859-1 (latin1) Ƃ
Unicode  upgrade ܂B

B<̊֐ Perl 5.6.1 ȍ~A XS łł̂ݒ񋟂܂B>

=item C<utf16_to_cp932([UNICODE_CALLBACK,] STRING [, UNICODE_OPTION])>

UTF-16 (C<BOM> t܂͖)  CP-932 ɕϊ܂B

=item C<utf16le_to_cp932([UNICODE_CALLBACK,] STRING [, UNICODE_OPTION])>

UTF-16LE  CP-932 ɕϊ܂B

=item C<utf16be_to_cp932([UNICODE_CALLBACK,] STRING [, UNICODE_OPTION])>

UTF-16BE  CP-932 ɕϊ܂B

=item C<utf32_to_cp932([UNICODE_CALLBACK,] STRING [, UNICODE_OPTION])>

UTF-32 (C<BOM> t܂͖)  CP-932 ɕϊ܂B

=item C<utf32le_to_cp932([UNICODE_CALLBACK,] STRING [, UNICODE_OPTION])>

UTF-32LE  CP-932 ɕϊ܂B

=item C<utf32be_to_cp932([UNICODE_CALLBACK,] STRING [, UNICODE_OPTION])>

UTF-32BE  CP-932 ɕϊ܂B

=back

=head2 Ao

B<ftHg:>

    cp932_to_utf8     utf8_to_cp932
    cp932_to_utf16le  utf16le_to_cp932
    cp932_to_utf16be  utf16be_to_cp932

    cp932_to_unicode  unicode_to_cp932 (XS ݂̂Œ񋟂܂)

B<v:>

    cp932_to_utf32le  utf32le_to_cp932
    cp932_to_utf32be  utf32be_to_cp932
                      utf16_to_cp932 [*]
                      utf32_to_cp932 [*]

[*] ƑΉׂ C<cp932_to_utf16()>  C<cp932_to_utf32()>
͖łB܂ C<SJIS_CALLBACK> ̕ԂlɂĂ
KvƍlĂ܂B
i̘A C<BOM> ̔FƏKvƂȂł傤Bj

=head1 ӎ

̃W[ Pure Perl ł̓ChiF<perlunicode> QƁj
ł܂BKvȂAPerl 5.7 ȍ~
C<utf8::decode>/C<utf8::encode>iF<utf8> QƁjgĂB

=head1 

SADAHIRO Tomoyuki <SADAHIRO@cpan.org> iA msj

Copyright(C) 2001-2006, SADAHIRO Tomoyuki. Japan. All rights reserved.

This module is free software; you can redistribute it
and/or modify it under the same terms as Perl itself.

=head1 Ql

=over 4

=item Microsoft PRB, Article ID: Q170559

Conversion Problem Between Shift-JIS and Unicode

=item cp932 to Unicode table

http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP932.TXT

http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit932.txt

http://www.microsoft.com/globaldev/reference/dbcs/932.htm

=back

=cut
