シフトJISコードからUTF-8コードに変換するスクリプト。
- 平成18年10月19日 公開
シフトJISコードの文字列をUTF-8コードに変換する Perl スクリプトです。
- このスクリプトは、UTF-8コードからシフトJISコードに変換するスクリプトの逆動作となります。
- このスクリプトとUTF-8コードからシフトJISコードに変換するスクリプトとjcodeを組み合わせれば、取り敢えず一通りの日本語処理が可能になります。
スクリプトの概要。
シフトJISコードでエンコードされた日本語文字列をUTF-8コードでのエンコードに変換する Perl スクリプトです。
Perl 5.8.x以降では文字コードの相互変換が標準モジュールとして実装されているため余り役に立たないものと思われますが、旧式のPerl 5.0xなどで利用される場合には役に立つでしょう。
- 厳密にはウィンドウズの日本語文字コードからの変換とします。このため、機種依存文字としてシフトJISコードでは利用を憚るべきとされる丸囲み数字なども利用出来るようになります。
尚、BOMは一切附与しません。
また、シフトJISコードから外れるマルティバイト文字は、変換の際に削除されます。
- 著作権について制作者は主張はしますが、行使は一切致しません。スクリプトのご利用, 改造及び再配布に関しても一切問いません。
- 本スクリプトをご利用になった結果に関しては、改造の有無を問わず一切免責とさせて頂きます。
スクリプトの使い方。
- スクリプトを収めたZIPファイルをダウンロード (ZIP形式ファイル)して解凍します。
-
解凍したスクリプトはお好きなディレクトリにシフトJISコードで設置して下さい。
- 絶対に他の文字コードに変換しないで下さい。
-
当該スクリプトを利用する場合は、当該スクリプトを
require文で呼び出してから、以下のように変換したい文字列を変数に入れて呼び出します。&m_utf::sjis2utf8(\$str);呼出し後に、この変数には変換後の文字列が入ります。
スクリプトの仕組み。
シフトJISコードは、JISの区点コードを単純な公式で変換したものです。
同様にJISの区点コードを単純な公式で変換したISO-2022-JPコード(いわゆるJISコード)やEUC日本語文字コードは、元が同じ区点コードなので、当然相互変換も比較的単純に出来ます。
しかしながら、UTF-8コードは、JISの区点コードではなくユニコードを公式で変換したもので、従ってシフトJISコード等との相互変換公式は存在しません。
このため、漢字コード一つ一つに対応した変換表が必要になります。
このシフトJISコードからUTF-8コードに変換するスクリプトでは、変換表を予めハッシュの定義の形で用意しておき、それを正規表現で頭から順に逐一変換していくようにしております。
文字コード変換表をどのようにして作ったか。
記号, 仮名文字, 第一水準, 第二水準など何千もある文字を一つ一つ表にするのは大変です。
今回は、Perl 5.8を利用して、
- シフトJISコードの文字0x8041(全角空白)から順に一文字ずつUTF-8に変換させ、
- 正当なUTF-8の一文字のコードとなっているものだけをハッシュの定義に加える
と言う処理を行うスクリプトを作成して、それで変換表のみならずスクリプト本体を生成しました。
- 言うまでもありませんが、途中半角仮名文字のコードになるので、その点も配慮しました。
- また、ファイルサイズを少しでも小さくするため、シフトJISコード側は一部文字を除いて文字そのものを記述しております。勿論、「
表」など後半オクテットが「\」となる文字については、後ろに「\」をつけるなどして処理しております。
このお蔭で、僅か数時間で完成しました。