=pod =encoding Shift_JIS =head1 名称 ShiftJIS::CP932::Correct - Windows CP-932の文字列を正しいものにする =head1 概要 use ShiftJIS::CP932::Correct; $corrected_cp932 = correct_cp932($cp932_string); =head1 説明 Microsoft Code Page 932 (CP-932) のテーブルは、次の7915文字からなります。 JIS X 0201 一バイト文字 (191文字), JIS X 0208 二バイト文字 (6879文字), NEC特殊文字 (SJIS 13区から 83文字), NEC選定IBM拡張文字 (SJIS 89〜92区から 374文字), そして IBM拡張文字 (SJIS 115〜119区から 388文字). このテーブルには、同じ文字が二重(若干のものは三重)に定義されているために、 Unicodeとの往復変換ができない文字があります。これは NEC および IBM のベンダ定義文字のためです。 例えば、Unicode の C に対応する CP-932 の文字は、 JIS X 0208 の C<0x81e0> と NEC特殊文字の C<0x8790> の 2つがあります。 そのため、Unicode から CP-932 への変換プログラムの中には、 C を、不注意のため C<0x81e0> ではなく、 C<0x8790> に変換するものがあるかもしれません。 このような挙動は好ましくありません。なぜなら、 NEC特殊文字(または他のベンダ定義文字)は互換性が低いからです。 このモジュールは、そのような(正しいことは正しいのだがやはり) 「間違っている」CP-932 文字列を正しいものにします。 このモジュールは、 "Microsoft PRB: Conversion Problem Between Shift-JIS and Unicode (Article ID: Q170559)" で提供されたマップを使用しています。 =over 4 =item C CP-932 文字列を正しいものにして返します。 すなわち、多重定義文字の好ましくない区点を好ましい区点に変換します。 Unicodeとの往復変換が可能な文字はそのまま残されます。 CP-932で定義されない区点の文字は削除されます。 例えば,C<"\x87\x90"> は C<"\x81\xe0"> に変換されます。 =item C 文字列が「正しくされた」CP-932 文字列がどうかの真偽値を返します。 =item C 文字列が CP-932 文字列がどうかの真偽値を返します。 =back =head2 輸出 correct_cp932 と is_corrected_cp932 はデフォルトで輸出されます。 is_cp932 は要求により輸出できます。 =head1 注意事項 「正しくされた」CP-932 といっても、ベンダ定義文字を含み得るものです。 CP-932は、Shift_JISとは違います。 =head1 作者 SADAHIRO Tomoyuki 貞廣 知行 Copyright(C) 2001-2002, 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 参考 =over 4 =item 1 Microsoft PRB: Conversion Problem Between Shift-JIS and Unicode (Article ID: Q170559) =item 2 L =back =cut