Jcodeの波ダッシュ文字化けについて
Jcodeを使った際に必ず直面する波ダッシュ(~)の文字化けについての話。
今まではJavascriptでゴリ押ししたり、Jcodeモジュール自体を差し替えるという手段をとっていましたが、今回メールフォームプロの安定化にあたって逃げてちゃ駄目だなということでちゃんと置換で対処しました。
プログラムにおける文字とは
まず文字ってのがどういう成り立ちなのかの説明から。パソコンが認識できるのは0か1のみ。その中で文字を出力するために文字にはコードがあります(いわゆる文字コードとは別です)。例えば波ダッシュの場合、Shift_jisで「817C」という16進数の文字コードがあります。で、その16進数がコンピュータで理解されるときは2進数になるわけなんですが、人間が見ている文字情報はすべてこのように番号が割り振られているんですね。まずそれが文字のコード。
文字コードとは
で、これが本当に厄介というか旧世代の産物なのですが「文字コード」というのがあります。それはその文字のコード(チャート)の根本的な違いによって派生した多くの規格なわけです。日本で古くから使われているJIS(ISO-2022-JP)やWindowsの日本語版で標準実装されているShift_jis、現在多くのWebサイトやMacOS、Linuxなどで使われているUTF-8。これらの文字コードというのは単純に参照する「文字の番号表」が違うだけなんです。そして相互乗り入れが出来ないという致命的な欠陥があり、多くのプログラマを悩ませる悪しき遺産でもあるわけです。
文字コード別に文字コードを見てみましょう
波ダッシュで言うと
Shift_jisで817C
JISで1B24B21A1B28J
UTF-8でEFBD9E
となります。あーめんどくせぇ。
なぜJcodeで波ダッシュが文字化けするか
で、日本語を各文字コードにアウトプットしてくれるJcodeは波ダッシュ(~)と全角チルダ(-)の処理が抜けてるんですね。Jcodeはどうやって文字コードを相互変換しているかというと、膨大な量のチャートを実行して単純に文字を一文字一文字置き換えてるんです。で、チャートの中に対象文字が無いために文字化けや??になったりするわけですね。なのでJcodeのチャートの中にそれを書き足せば解決はするのです。でも大体のサーバではJcodeがすでにインストールされているため、書き換える事ができないんですね。
上記を踏まえてPerlで波ダッシュを置き換える
ということで波ダッシュを置き換える処理を追加してみましょう。今回はJISに変換する場合のケースです。
01.まず対象の文字を識別子へと置き換えます
$str =~ s/~/<_hotfix_wavedash_>/g;
02.次に文字コードをJcodeを使ってJISに変換します
Jcode::convert(\$str,'jis');
03.最後にJISコードの波ダッシュを先ほど置き換えた識別子と置き換えます
$str =~ s/<_hotfix_wavedash_>/\x1b\x24B\x21A\x1b\x28J/g;
で終わり。ということになりますね。\xはPerlの正規表現で16進数のアスキーとしてという意味です。まぁよくわからないですがこうなるってことですね。
と言うことで長きに渡って対応してこなかった問題ですが、これで一応メールフォームプロで波ダッシュが化ける事は無くなるでしょう。あ~よかった。
和田憲幸の広告
- BTOパソコン
- www.pc-take.com自作PCやBTOパソコンの事ならシューマイが美味しい神奈川県は横浜のPC-takeにお任せください。
- 事業再生のSTP
- www.s-tp.jp経営が苦しい、そんなときはSTPに経営相談や経営コンサルティングをご依頼ください。
- ドライフラワー卸売り
- www.coretrading.co.jpドライフラワーやプリザーブドフラワーの業務用卸売りならコアトレーディング。
- 通話録音装置 ネイクス
- www.neix.co.jp通話録音装置や通話録音システムのことならネイクス。
- インプラント 東淀川区上新庄
- www.higashi.ne.jp東淀川区上新庄でインプラントや矯正歯科ならひがし歯科で決まり!
- 吉野川 ラフティング
- www.safari-g.com四国は吉野川でラフティングやハイドロスピード、キャニオニングと言えばサファリだよね。
- ホームページ制作 アルバイト
- next-level.bizホームページ制作、Webデザイナーのアルバイト、SOHOのことはネクストレベルまでご相談ください。
- 札幌 美容室 アイウィル
- www.aiwill.jp札幌市中央区で美容師をお探しの際はアイウィルまでお越しください。
- WEBLOGS6.1.0
- www.synck.jpこのブログはシンクテクニカのウェブログでつくられています
- 札幌 ホームページ制作
- www.synck.com札幌でホームページ制作やWebアプリケーション制作ならシンクグラフィカへ。
- iPhoneで内線電話
- www.smartgate.biziPhoneやAndroidから内線電話が無料でかけれる。
- 新潟リフォーム
- www.neohouse.jp新潟で注文住宅とリフォームはネオハウス。