トップ過去ログこのサイトについて
1304122

半角カタカナと文字化け

[Program] at 2004/12/06 02:01:00.
 掲示板などに書き込む際、半角カタカナを入力したら化けてしまった、ということは良く聞く話。なんでこうなるのか、という原因を説明しているサイトもたくさんあるので、今回はそこもはしょって、実際にどうすればよいのかという話をちょこっとだけ説明します。

 Internet上で配布されているBBSスクリプトなどは、汎用性を持たせるためにどんな文字コードでも動作するようになっています。そして内部のデータ形式だけ文字コードを固定すれば、スクリプト自体の文字コードを変換(スクリプトによっては、出力に使用する文字コードを指定できるものもあります)してやるだけで、あとはShift_JISだろうとEUC-JPだろうと動作するためです。もちろんデータファイルの文字コードは固定されていますので、別の文字コードで出力するスクリプトにもそのまま流用できます。

 ほとんどのスクリプトにおいて、これを実現するためにjcodeという日本語コード変換ライブラリを利用していますが、このjcodeのconvert関数に渡すとき、入力された文字コードがどれなのかが分からないため、自動判定で渡します。
 このとき、入力された文字が半角カタカナのみの文章(あるいは半角・全角が混ざった短い文章)の場合、jcodeは文字コードを正常に識別できなくなり、結果文字化けが発生する、ということです。 これはjcodeの問題ではなく、半角カタカナの文字コードが原因で発生します。

 これを回避するには、jcodeに自動判別で渡さなければよい、つまり入力される文字コードも、出力される文字コードも固定すれば良いわけです。(スクリプトによっては出力に使用する文字コードを指定しているのにもかかわらず、jcodeに渡すときに自動判定にしているものもあります)
 具体的には、


&jcode'convert(文字列へのポインタ, 'sjis');

と、出力文字コードは指定しているのに入力文字コードを指定していない場合、以下のように入力文字コードも固定してしまいます。


&jcode'convert(文字列へのポインタ, 'sjis', 'sjis');

こうすることで、半角カタカナの文字化けを回避することができるようになります。

 ちなみにtackynoteの場合は322行目を(メール送信機能を使用する場合は1307行目、1310行目、1339行目も)、tackynotespの場合は496行目、519行目を(同じくメール送信機能を使用する場合は1953行目、1956行目、1985行目も)、それぞれ変更してあげてください。


コメント

コメントはありません。

コメントを登録

この記事へのトラックバック

ナビゲーションバー