UTF-8コードからシフトJISコードに変換するスクリプト。
- 平成18年12月12日 公開
UTF-8コードの文字列をシフトJISコードに変換する Perl スクリプトです。
- このスクリプトは、シフトJISコードからUTF-8コードに変換するスクリプトの逆動作となります。
- このスクリプトとシフトJISコードからUTF-8コードに変換するスクリプトとjcodeを組み合わせれば、取り敢えず一通りの日本語処理が可能になります。
- 但し、シフトJISコードに該当する文字が無い場合は、〓マークに変換されます。
スクリプトの概要。
UTF-8コードでエンコードされた日本語文字列をシフトJISコードでのエンコードに変換する Perl スクリプトです。
Perl 5.8.x以降では文字コードの相互変換が標準モジュールとして実装されているため余り役に立たないものと思われますが、旧式のPerl 5.0xなどで利用される場合には役に立つでしょう。
。但し、Perlの標準ライブラリだと変換不能な文字があった場合に、エラーになる?ようなので、このスクリプトではそれもフォローするようにします。とは言え、単に〓マークに置き換えるだけですが- 厳密にはウィンドウズの日本語文字コードへの変換とします。このため、機種依存文字としてシフトJISコードでは利用を憚るべきとされる丸囲み数字なども利用出来るようになりますが、ウィンドウズ以外では適切な表示が出来ない事に注意して下さい。
尚、BOMつきの文字列に関しては、考慮しておりません。
- 著作権について制作者は主張はしますが、行使は一切致しません。スクリプトのご利用, 改造及び再配布に関しても一切問いません。
- 本スクリプトをご利用になった結果に関しては、改造の有無を問わず一切免責とさせて頂きます。
スクリプトの使い方。
- スクリプトを収めたZIPファイルをダウンロード (ZIP形式ファイル)して解凍します。
- 解凍したスクリプトはお好きなディレクトリにシフトJISコードで設置して下さい。
- 絶対に他の文字コードに変換しないで下さい。
- 当該スクリプトを利用する場合は、当該スクリプトを
require文で呼び出してから、以下のように変換したい文字列を変数に入れて呼び出します。&m_utf::utf82sjis(\$str);呼出し後に、この変数には変換後の文字列が入ります。
スクリプトの仕組み。
基本的に、シフトJISコードからUTF-8コードに変換するスクリプトの処理の逆変換です。
但し、UTF-8コードで扱える文字の中には、シフトJISコードで扱えないものもあり、そのような文字は〓マークに置き換えるようにしております。
- ウェブコンテンツ向けに数値文字参照に変換する函数も作ると良かったのですが、現在のヴァージョンではやっておりません。
尚、UTF-8コードでは、マルティバイト文字であっても、その先頭が簡単に判別出来るので、少しは組み易かったと言えます。
動作テストをしてみて。
公開する以上は当然ながら正しく動作している事を確認する必要がある訳ですが、今回は動作確認だけでなく日本語文書に於いてシフトJISコードから外れる文字がどれくらい入り得るかも調べてみようと思いました。
- 余りに多くの文字が化けてしまうと、実用性が無いと言う事になりますので…。
そこで、UTF-8でエンコーディングしている旧字旧仮名(いわゆる正字正仮名)で記述されたサイトを巡ってみて、幾つかのページをそのままローカル保存して変換してみました。
- 常用漢字現代仮名(いわゆる略字新仮名)では、シフトJISコードの範囲から外れる事はまず無いと思われるからです。
試してみたところ、旧字旧仮名で書かれているものであっても、殆どの文字はシフトJISの範囲で変換出来るようです。
殆どのページは一段落に一文字程度の〓が入るか入らないかと言う程度でした。
- 実際、旧字旧仮名であっても、シフトJISコードでエンコードされているウェブページもありますし。
とは言え、オリジナル文書が
- 朝鮮文字などの非ラテン系外国文字
- 日本語文字でもシフトJISコードに入らない文字
を正しく扱うためにUTF-8でエンコードしている場合、変換した結果では意味が通らなくなる恐れが無いとは言い切れません。
あくまでも携帯電話や旧式のユーザエージェント(例:ネットスケープ 3.x以前)など、UTF-8文字コードが扱えない環境向けと割り切ると良いでしょう。