The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

–¼�Ì

ShiftJIS::CP932::MapUTF - Microsoft CP-932‚ÆUnicode‚Æ‚Ì•ÏŠ·

ŠT—v

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

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

�à–¾

ƒ}ƒCƒNƒ�ƒ\ƒtƒgƒEƒBƒ“ƒhƒEƒY (Microsoft Windows) ƒR�[ƒhƒy�[ƒW 932 (CP-932) ‚̃e�[ƒuƒ‹‚Í 7915 •¶Žš‚©‚ç‚È‚è‚Ü‚·�B

    JIS X 0201 ˆêƒoƒCƒg•¶Žš�i191 •¶Žš�j
    JIS X 0208 “ñƒoƒCƒg•¶Žš�i6879 •¶Žš�j
    NEC“ÁŽê•¶Žš�i83 •¶Žš�A13‹æ�j
    NEC‘I’èIBMŠg’£•¶Žš�i374 •¶Žš�A89�`92‹æ�j
    IBMŠg’£•¶Žš�i388 •¶Žš�A115�`119‹æ�j

‚±‚Ì•\‚Í�A‰�•œ•ÏŠ·‚Å‚«‚È‚¢“ñ�d’è‹`•¶Žš‚ðŠÜ‚ñ‚Å‚¢‚Ü‚·�B ‚±‚ê‚ç‚Ì“ñ�d’è‹`•¶Žš‚̓xƒ“ƒ_�[�iNEC ‚¨‚æ‚Ñ IBM�j’è‹`‚ÌŠg’£•¶Žš‚Ì‚½‚ß‚Å‚·�B —Ⴆ‚Î�AUnicode ‚Ì U+2252 ‚ɑΉž•t‚¯‚ç‚ê‚镶Žš‚Í“ñŒÂ‚ ‚è‚Ü‚·�B ‚‚܂è�AJIS X 0208 •¶Žš‚Ì 0x81e0 ‚Æ NEC “ÁŽê•¶Žš‚Ì 0x8790 ‚Å‚·�B

ŽÀ�Û�ACP-932 ‚Ì 7915 •¶Žš‚ð Unicode ‚Ì 7517 •¶Žš‚ɑΉž•t‚¯‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñ�B ‚±‚Ì‚½‚ß�A398 ‚̉�•œ•ÏŠ·‚Å‚«‚È‚¢‘ΉžŠÖŒW‚ª‘¶�Ý‚µ‚Ü‚·�B

‚±‚̃‚ƒWƒ…�[ƒ‹‚Í�ACP-932 ‚©‚ç Unicode ‚É�A‚Ü‚½�A Unicode ‚©‚ç CP-932 ‚É�A“K�Ø‚É•ÏŠ·‚·‚éŠÖ�”‚ð’ñ‹Ÿ‚µ‚Ü‚·�B

CP-932 ‚©‚ç Unicode ‚Ö‚Ì•ÏŠ·

‘æˆêˆø�”‚ªƒŒƒtƒ@ƒŒƒ“ƒX‚Ì�ê�‡�A‚»‚ê‚Í SJIS_CALLBACK ‚Æ‚µ‚Ä�A Unicode ‚ւ̑Ήž‚ª‚È‚¢ CP-932 •¶Žš‚Ì�ˆ—�‚É—p‚¢‚ç‚ê‚Ü‚·�B (STRING ‚ɃŒƒtƒ@ƒŒƒ“ƒX‚ð—^‚¦‚邱‚Æ‚Í‚Å‚«‚Ü‚¹‚ñ�B)

SJIS_CALLBACK ‚ª—^‚¦‚ç‚ê‚Ä‚¢‚é�ê�‡�A ‘æ“ñˆø�”‚ª STRING ‚Æ‚µ‚Ä—p‚¢‚ç‚ê‚Ü‚·�B ‚³‚à‚È‚¯‚ê‚Αæˆêˆø�”‚ª STRING ‚É‚È‚è‚Ü‚·�B

‚à‚µ SJIS_CALLBACK ‚ª—^‚¦‚ç‚ê‚Ä‚¢‚È‚¢�ê�‡�A Unicode ‚ւ̑Ήž‚ª‚È‚¢ CP-932 •¶Žš‚Í–Ù‚Á‚Ä�í�œ‚³‚ê�A •”•ª•¶Žš‚͈êƒoƒCƒg•ª’µ‚΂³‚ê‚Ü‚·�B SJIS_CALLBACK ‚Æ‚µ‚Ä�A�í‚ɋ󕶎š—ñ‚ð•Ô‚· ƒR�[ƒhƒŠƒtƒ@ƒŒƒ“ƒX (sub {''}) ‚ª“n‚³‚ꂽ‚©‚̂悤‚É“®�삵‚Ü‚·�B

�¡‚Ì‚Æ‚±‚ë�ASJIS_CALLBACK ‚Æ‚µ‚Ä‚Í�A ƒR�[ƒhƒŠƒtƒ@ƒŒƒ“ƒX‚Ì‚Ý‚ªŽg‚¦‚Ü‚·�B ƒR�[ƒhƒŠƒtƒ@ƒŒƒ“ƒX‚Ì•Ô‚è’l‚ªƒ}ƒbƒsƒ“ƒO‚Ì‚È‚¢•¶Žš‚Ì‘ã‚í‚è‚É‘}“ü‚³‚ê‚Ü‚·�B

ƒR�[ƒhƒŠƒtƒ@ƒŒƒ“ƒX SJIS_CALLBACK ‚Í�AˆêŒÂˆÈ�ã‚̈ø�”‚Æ‚Æ‚à‚É ŒÄ‚Ñ�o‚³‚ê‚Ü‚·�Bƒ}ƒbƒsƒ“ƒO‚Ì‚È‚¢•¶Žš‚ª•”•ª“I‚È“ñƒoƒCƒg•¶Žš �i‘æˆêƒoƒCƒg‚݂̂̈êƒoƒCƒg’·‚Ì•¶Žš—ñ�j‚Ì�ê�‡�A ‘æˆêˆø�”‚Í–¢’è‹`’l�iundef�j‚É‚È‚è�A ‘æ“ñˆø�”‚̓oƒCƒg‚ð•\‚·•„�†‚È‚µ�®�”’l‚É‚È‚è‚Ü‚·�B •”•ª•¶Žš‚Å‚È‚¯‚ê‚Î�A‘æˆêˆø�”‚Í�A•¶Žš‚ð•\‚·•¶Žš—ñ‚É‚È‚è‚Ü‚·�B

ƒfƒtƒHƒ‹ƒg‚Å‚Í�A•”•ª“I‚È“ñƒoƒCƒg•¶Žš‚Í�A•¶Žš—ñ�iSTRING�j‚Ì––”ö‚É‚Ì‚Ý Œ»‚ê‚é‰Â”\�«‚ª‚ ‚è�A•¶Žš—ñ‚Ì�擪‚â“r’†‚É‚ÍŒ»‚ê‚Ü‚¹‚ñ �iSJIS_OPTION ‚Ì 't' ‚àŽQ�Æ‚Ì‚±‚Æ�j�B

—á

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

�ã‹L‚Ì—á‚Å�A$char ‚Æ‚µ‚Ä‚Í�A"\x80", "\x82\xf2", "\xfc\xfc", "\xff" ‚È‚Ç‚ª‚ ‚蓾‚Ü‚·�B

SJIS_CALLBACK ‚Ì•Ô‚è’l‚Í�A•ÏŠ·�æ‚ÌŒ`Ž®‚É�‡‚킹‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñ�B —Ⴆ‚Î�Acp932_to_utf16be() ‚Æ‚Æ‚à‚É UTF-8 ‚ð•Ô‚· SJIS_CALLBACK ‚ðŽg‚Á‚Ä‚Í‚¢‚¯‚Ü‚¹‚ñ�B ‚‚܂è�AUTF ‚²‚Æ‚É�ASJIS_CALLBACK ‚ð—pˆÓ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·�B

SJIS_OPTION ‚ð STRING ‚ÌŒã‚É‚¨‚­‚±‚Æ‚ª‚Å‚«‚Ü‚·�B ‚±‚ê‚ç‚Í 'tg' ‚â 'gst' ‚̂悤‚É‘g‚Ý�‡‚킹‚邱‚Æ‚à ‚Å‚«‚Ü‚·�i�‡�˜‚Í”CˆÓ‚Å‚·�j�B

    'g'    CP-932 ŠOŽš�iƒ†�[ƒU’è‹`•¶Žš�j[0xF040�`0xF9FC (95�`114‹æ)] ‚ð
           Unicode ‚Ì PUA [0xE000�`0xE757] ‚É•ÏŠ·‚µ‚Ü‚·�i1880 •¶Žš�j�B

    's'    CP-932 –¢’è‹`‚̈êƒoƒCƒg•¶Žš‚ðˆÈ‰º‚̂悤‚É•ÏŠ·‚µ‚Ü‚·�B
           0x80 => U+0080,  0xA0 => U+F8F0,
           0xFD => U+F8F1,  0xFE => U+F8F2,  0xFF => U+F8F3.

    't'    ‘æ“ñƒoƒCƒg‚Ì”ÍˆÍ [0x40..0x7E, 0x80..0xFC] ‚ðƒ`ƒFƒbƒN‚µ‚Ü‚·�B
           —Ⴆ‚Î "\x81\x39" ‚̓fƒtƒHƒ‹ƒg‚Å‚Í–¢’è‹`‚Ì“ñƒoƒCƒg•¶Žš‚Æ
           ‚Ý‚È‚µ‚Ü‚·‚ª�A't' ‚ð—p‚¢‚é‚Æ�A•”•ª•¶ŽšƒoƒCƒg 0x81 ‚ÌŒã‚É
           ˆêƒoƒCƒg•¶Žš "\x39" ‚ª‘±‚¢‚½‚à‚Ì‚Æ‚Ý‚È‚µ‚Ü‚·�B
cp932_to_utf8([SJIS_CALLBACK,] STRING [, SJIS_OPTION])

CP-932 ‚ð UTF-8 ‚É•ÏŠ·‚µ‚Ü‚·�B

cp932_to_unicode([SJIS_CALLBACK,] STRING [, SJIS_OPTION])

CP-932 ‚ð Unicode ‚É•ÏŠ·‚µ‚Ü‚·�B �iSVf_UTF8 ƒtƒ‰ƒO•t‚«‚Ì Perl‚Ì“à•”Œ`Ž®, perlunicode ‚ðŽQ�Æ�B�j

‚±‚ÌŠÖ�”‚Í Perl 5.6.1 ˆÈ�~�A‚©‚ XS ”Å‚Å‚Ì‚Ý’ñ‹Ÿ‚³‚ê‚Ü‚·�B

cp932_to_utf16le([SJIS_CALLBACK,] STRING [, SJIS_OPTION])

CP-932 ‚ð UTF-16LE ‚É•ÏŠ·‚µ‚Ü‚·�B

cp932_to_utf16be([SJIS_CALLBACK,] STRING [, SJIS_OPTION])

CP-932 ‚ð UTF-16BE ‚É•ÏŠ·‚µ‚Ü‚·�B

cp932_to_utf32le([SJIS_CALLBACK,] STRING [, SJIS_OPTION])

CP-932 ‚ð UTF-32LE ‚É•ÏŠ·‚µ‚Ü‚·�B

cp932_to_utf32be([SJIS_CALLBACK,] STRING [, SJIS_OPTION])

CP-932 ‚ð UTF-32BE ‚É•ÏŠ·‚µ‚Ü‚·�B

Unicode ‚©‚ç CP-932 ‚Ö‚Ì•ÏŠ·

“ñ�d’è‹`•¶Žš‚Í‚·‚ׂÄ�AMicrosoft PRB Q170559 ‚É�]‚Á‚Ä•ÏŠ·‚³‚ê‚Ü‚·�B —Ⴆ‚Î U+2252 ‚Í "\x87\x90" ‚Å‚Í‚È‚­ "\x81\xE0" ‚É•ÏŠ·‚³‚ê‚Ü‚·�B

‘æˆêˆø�”‚ªƒŒƒtƒ@ƒŒƒ“ƒX‚Ì�ê�‡�A‚»‚ê‚Í UNICODE_CALLBACK ‚Æ‚µ‚Ä�A CP-932 ‚ւ̑Ήž‚ª‚È‚¢ Unicode •¶Žš‚Ì�ˆ—�‚É—p‚¢‚ç‚ê‚Ü‚·�B (STRING ‚ɃŒƒtƒ@ƒŒƒ“ƒX‚ð—^‚¦‚邱‚Æ‚Í‚Å‚«‚Ü‚¹‚ñ�B)

UNICODE_CALLBACK ‚ª—^‚¦‚ç‚ê‚Ä‚¢‚é�ê�‡�A ‘æ“ñˆø�”‚ª STRING ‚Æ‚µ‚Ä—p‚¢‚ç‚ê‚Ü‚·�B ‚³‚à‚È‚¯‚ê‚Αæˆêˆø�”‚ª STRING ‚É‚È‚è‚Ü‚·�B

‚à‚µ UNICODE_CALLBACK ‚ª—^‚¦‚ç‚ê‚Ä‚¢‚È‚¢�ê�‡�A CP-932 ‚ւ̑Ήž‚ª‚È‚¢ Unicode •¶Žš‚Í–Ù‚Á‚Ä�í�œ‚³‚ê�A ‚Ü‚½�A•”•ª•¶Žš‚͈êƒoƒCƒg•ª’µ‚΂³‚ê‚Ü‚·�B UNICODE_CALLBACK ‚Æ‚µ‚Ä�A�í‚ɋ󕶎š—ñ‚ð•Ô‚· ƒR�[ƒhƒŠƒtƒ@ƒŒƒ“ƒX (sub {''}) ‚ª“n‚³‚ꂽ‚©‚̂悤‚É“®�삵‚Ü‚·�B

�¡‚Ì‚Æ‚±‚ë�AUNICODE_CALLBACK ‚Æ‚µ‚Ä‚Í�A ƒR�[ƒhƒŠƒtƒ@ƒŒƒ“ƒX‚Ì‚Ý‚ªŽg‚¦‚Ü‚·�B ‚»‚̃R�[ƒhƒŠƒtƒ@ƒŒƒ“ƒX‚Ì•Ô‚è’l‚ª ƒ}ƒbƒsƒ“ƒO‚Ì‚È‚¢•¶Žš‚Ì‘ã‚í‚è‚É‘}“ü‚³‚ê‚Ü‚·�B

ƒR�[ƒhƒŠƒtƒ@ƒŒƒ“ƒX UNICODE_CALLBACK ‚Í�A ˆêŒÂˆÈ�ã‚̈ø�”‚Æ‚Æ‚à‚ɌĂÑ�o‚³‚ê‚Ü‚·�Bƒ}ƒbƒsƒ“ƒO‚Ì‚È‚¢•¶Žš‚ª •”•ª“I•¶Žš�i•s�³‚ȃoƒCƒg�j‚Ì�ê�‡�A‘æˆêˆø�”‚Í–¢’è‹`’l�iundef�j‚É‚È‚è�A ‘æ“ñˆø�”‚̓oƒCƒg‚ð•\‚·•„�†‚È‚µ�®�”’l‚É‚È‚è‚Ü‚·�B •”•ª•¶Žš‚Å‚È‚¯‚ê‚Î�A‘æˆêˆø�”‚Í�AUnicode•¶Žš‚Ì•„�†ˆÊ’u‚ð•\‚· •„�†‚È‚µ�®�”’l‚É‚È‚è‚Ü‚·�B

—Ⴆ‚Î�ACP-932 ‚ւ̑Ήž‚ª‚È‚¢•¶Žš‚ð HTML 4.01 ‚Ì�”’l•¶ŽšŽQ�Æ‚É •ÏŠ·‚·‚é•û–@‚ðŽ¦‚µ‚Ü‚·�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);

UNICODE_CALLBACK ‚Ì•Ô‚è’l‚Í CP-932 ‚Æ‚µ‚Ä�³‚µ‚­‚ ‚é•K—v‚ª‚ ‚è‚Ü‚·�B

UNICODE_OPTION ‚ð STRING ‚ÌŒã‚É‚¨‚­‚±‚Æ‚ª‚Å‚«‚Ü‚·�B ‚±‚ê‚ç‚Í 'fg' ‚â 'gsf' ‚̂悤‚É‘g‚Ý�‡‚킹‚邱‚Æ‚à ‚Å‚«‚Ü‚·�i�‡�˜‚Í”CˆÓ‚Å‚·�j�B

    'g'    CP-932 ŠOŽš�iƒ†�[ƒU’è‹`•¶Žš�j[0xF040�`0xF9FC (95�`114‹æ)] ‚É
           Unicode ‚Ì PUA [0xE000�`0xE757] ‚©‚ç•ÏŠ·‚µ‚Ü‚·�i1880 •¶Žš�j�B

    's'    CP-932 –¢’è‹`‚̈êƒoƒCƒg•¶Žš‚̑Ήž•t‚¯‚ð’ljÁ‚µ‚Ü‚·�B
           U+0080 => 0x80,  U+F8F0 => 0xA0,
           U+F8F1 => 0xFD,  U+F8F2 => 0xFE,  U+F8F3 => 0xFF.

    'f'    Unicode ‚©‚ç CP-932 ‚Ö‚ÌŠô‚‚©‚Ì‘ã—p“I‚È•ÏŠ· (fallbacks) ‚ð
           ’ljÁ‚µ‚Ü‚·�Bƒ}ƒbƒsƒ“ƒO‚ª’ljÁ‚³‚ê‚镶Žš‚Í�Alatin-1 —̈æ
           [U+00A0..U+00FF] ‚Ì‚¤‚¿‚ÌŠô‚‚©‚Ì•¶Žš‚Æ�A•½‰¼–¼‚̃” [U+3094,
           •Ð‰¼–¼‚̃” (0x8394) ‚É‚È‚è‚Ü‚·] ‚Å‚·�B
utf8_to_cp932([UNICODE_CALLBACK,] STRING [, UNICODE_OPTION])

UTF-8 ‚ð CP-932 ‚É•ÏŠ·‚µ‚Ü‚·�B

unicode_to_cp932([UNICODE_CALLBACK,] STRING [, UNICODE_OPTION])

Unicode ‚ð CP-932 ‚É•ÏŠ·‚µ‚Ü‚·�B

‚±‚Ì Unicode ‚Í�APerl ‚Ì“à•”Œ`Ž®�iperlunicode ŽQ�Æ�j�B SVf_UTF8 ƒtƒ‰ƒO•t‚«‚Å‚È‚¢�ê�‡�AISO 8859-1 (latin1) •¶Žš—ñ‚Æ‚µ‚Ä Unicode ‚É upgrade ‚³‚ê‚Ü‚·�B

‚±‚ÌŠÖ�”‚Í Perl 5.6.1 ˆÈ�~�A‚©‚ XS ”Å‚Å‚Ì‚Ý’ñ‹Ÿ‚³‚ê‚Ü‚·�B

utf16_to_cp932([UNICODE_CALLBACK,] STRING [, UNICODE_OPTION])

UTF-16 (BOM •t‚«‚Ü‚½‚Í–³‚µ) ‚ð CP-932 ‚É•ÏŠ·‚µ‚Ü‚·�B

utf16le_to_cp932([UNICODE_CALLBACK,] STRING [, UNICODE_OPTION])

UTF-16LE ‚ð CP-932 ‚É•ÏŠ·‚µ‚Ü‚·�B

utf16be_to_cp932([UNICODE_CALLBACK,] STRING [, UNICODE_OPTION])

UTF-16BE ‚ð CP-932 ‚É•ÏŠ·‚µ‚Ü‚·�B

utf32_to_cp932([UNICODE_CALLBACK,] STRING [, UNICODE_OPTION])

UTF-32 (BOM •t‚«‚Ü‚½‚Í–³‚µ) ‚ð CP-932 ‚É•ÏŠ·‚µ‚Ü‚·�B

utf32le_to_cp932([UNICODE_CALLBACK,] STRING [, UNICODE_OPTION])

UTF-32LE ‚ð CP-932 ‚É•ÏŠ·‚µ‚Ü‚·�B

utf32be_to_cp932([UNICODE_CALLBACK,] STRING [, UNICODE_OPTION])

UTF-32BE ‚ð CP-932 ‚É•ÏŠ·‚µ‚Ü‚·�B

—A�o

ƒfƒtƒHƒ‹ƒg:

    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 ‚Ì‚Ý‚Å’ñ‹Ÿ‚³‚ê‚Ü‚·)

—v‹�‚³‚ê‚ê‚Î:

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

[*] ‚±‚ê‚ç‚ƑΉž‚·‚ׂ« cp932_to_utf16() ‚¨‚æ‚Ñ cp932_to_utf32() ‚Í–¢ŽÀ‘•‚Å‚·�B‚Ü‚¾ SJIS_CALLBACK ‚Ì•Ô‚è’l‚ɂ‚¢‚Ä‚à‚¤�­‚µŒŸ“¢‚ª •K—v‚Æ�l‚¦‚Ä‚¢‚Ü‚·�B �i•¶Žš—ñ‚̘AŒ‹‚É BOM ‚Ì”FŽ¯‚Æ�ˆ—�‚ª•K—v‚Æ‚È‚é‚Å‚µ‚傤�B�j

’�ˆÓŽ–�€

‚±‚̃‚ƒWƒ…�[ƒ‹‚Ì Pure Perl ”ł̓�ƒCƒh•¶Žš�iperlunicode ‚ðŽQ�Æ�j‚ð —�‰ð‚Å‚«‚Ü‚¹‚ñ�B•K—v‚È‚ç�APerl 5.7 ˆÈ�~‚Ì utf8::decode/utf8::encode�iutf8 ‚ðŽQ�Æ�j‚ðŽg‚Á‚Ä‚­‚¾‚³‚¢�B

�ìŽÒ

SADAHIRO Tomoyuki <SADAHIRO@cpan.org> �i’åœA ’m�s�j

Copyright(C) 2001-2007, 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.

ŽQ�lŽ‘—¿

Microsoft PRB, Article ID: Q170559

Conversion Problem Between Shift-JIS and Unicode

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

1 POD Error

The following errors were encountered while parsing the POD:

Around line 2:

Non-ASCII character seen before =encoding in '–¼�Ì'. Assuming CP1252