文字コード掲示板


記事表示


No.052投稿日時:2003/03/30(日) 19:56    <親記事>
投稿者:森山 将之

おかしな半角カナ文字化け対策

最近、Perl による CGI スクリプトでの半角カナの文字化け対策と称して以下のようなコードが各所で紹介されていますが、きちんと理解せずに紹介もしくは使用しているのではないかと思われます。

&jcode'h2z_sjis(*value); # (1)
&jcode'convert(*value, 'sjis'); # (2)

(1) は、$value の文字コードをシフトJISとみなして JIS X 0201 片仮名(半角カナ)を JIS X 0208 の片仮名に変換しています。
(2) は、入力文字コードを指定していないので、$value の文字コードを自動判定して、シフトJIS に変換しています。

おかしいと思いませんか?
入力されている文字コードが不明なので、シフトJISに統一する為に (2) の処理が行われているにも関わらずに、その前にシフトJISでの文字コード処理が行われています。
このような処理をしていると (2) で文字コード変換処理を入れているにも関わらず、ブラウザが日本語EUC で送信してきた場合などに (1) の変換で確実に文字化けを起こしてしまいます。よって (2) の文字コード変換は意味が無いという事になります。

では、なぜ、このようなおかしな処理が紹介されているのでしょう?
私が想像するに、半角カナ=JIS X 0201 の 8 ビットコードの右半面という認識しかなく、とりあえず convert() で文字化けが生じないように、JIS X 0201 の 8 ビットコードの右半面 (0xA1〜0xDF) を処理すれば良いと単純に考えているからではないかと思われます。

入力フォームのページがシフトJISの場合、半角カナ対策するなら、(1) だけで十分で、場合によっては (1) (2) の両方とも無くても良いと思います。なぜなら、最近の Web ブラウザは入力フォームのページと同じ文字コードで送信するのがほとんどだからです。
文字コード変換されないので、必ず日本語EUC で送信してしまう Lynx などで投稿した場合に文字化けしてしまいますが、処理の簡略化ができる事と半角カナで文字化けしない事のメリットを考えれば、現状では許容範囲なのではと思っています。文字コード変換しない事によって文字化けが頻発するようであれば、対策をする必要があるでしょうけれども。

ちなみに、この掲示板は、半角カナで文字化けする事なく、JISコード、シフトJIS、日本語EUC を正しく処理できるようにしてあります。


Script : Sylpheed 1.24
Modified by MORIYAMA Masayuki