UTF-8コードの文字列をシフトJISコードに変換する Perl スクリプトです。
UTF-8コードでエンコードされた日本語文字列をシフトJISコードでのエンコードに変換する Perl スクリプトです。
Perl 5.8.x以降では文字コードの相互変換が標準モジュールとして実装されているため余り役に立たないものと思われますが、旧式のPerl 5.0xなどで利用される場合には役に立つでしょう。
尚、BOM(バイトオーダマーク)つきの文字列に関しては、考慮しておりません。
解凍したスクリプトはお好きなディレクトリにシフトJISコードで設置して下さい。
当該スクリプトを利用する場合は、当該スクリプトをrequire
文で呼び出してから、以下のように変換したい文字列を変数に入れて呼び出します。
&m_utf::utf82sjis(\$str);
呼出し後に、この変数には変換後の文字列が入ります。
基本的に、シフトJISコードからUTF-8コードに変換するスクリプトの処理の逆変換です。
但し、UTF-8コードで扱える文字の中には、シフトJISコードで扱えないものもあり、そのような文字は〓マークに置き換えるようにしております。
尚、UTF-8コードでは、マルティバイト文字であっても、その先頭が簡単に判別出来るので、少しは組み易かったと言えます。
シフトJISコードからUTF-8コードに変換するスクリプトの対応表と一緒に、その逆変換表を作りました。
公開する以上は当然ながら正しく動作している事を確認する必要がある訳ですが、今回は動作確認だけでなく日本語文書に於いてシフトJISコードから外れる文字がどれくらい入り得るかも調べてみようと思いました。
そこで、UTF-8でエンコーディングしている旧字旧仮名(いわゆる正字正仮名)で記述されたサイトを巡ってみて、幾つかのページをそのままローカル保存して変換してみました。
試してみたところ、旧字旧仮名で書かれているものであっても、殆どの文字はシフトJISの範囲で変換出来るようです。
殆どのページは一段落に一文字程度の〓が入るか入らないかと言う程度でした。
とは言え、オリジナル文書が
を正しく扱うためにUTF-8でエンコードしている場合、変換した結果では意味が通らなくなる恐れが無いとは言い切れません。
あくまでも携帯電話や旧式のユーザエージェント(例:ネットスケープ 3.x以前)など、UTF-8文字コードが扱えない環境向けと割り切ると良いでしょう。