no-image

SQLiteManager1.1.3でUTF-8のlangファイルを作る

SQLiteManager1.1.0で文字化けが発生するでUTF-8のデータを扱っている時にメッセージが文字化けする問題を解決したいというコメントをもらったので回答します。

まず、なぜUTF-8のデータを扱っているときに文字化けするかというと、表示しているlangファイルの文字コードがeuc-jpだからです。そこで表示しているlangファイルの文字コードをUTF-8に変換してUTF-8のデータを扱っているときに文字化けしないようにしてみます。

作業としては簡単で、lang/japanese.inc.phpを開いて10行目にある$charsetの値をeuc-jpからutf-8に置き換えます。どういう意味があるのか実はよくわかってませんが次の行にあるja-euc-jpもja-utf-8に置き換えましょう。置換が終わったら今度はファイルをUTF-8に変換して保存してください。vimの場合、:set fileencoding=utf-8で変換できます。

これで作業は終わりです。実際にやってみたところ問題なく画面がでてきました。

が。質問者によると、Warning: cannot yet handle MBCS in html_entity_decode()というエラーメッセージがでるという事だったので調べてみると、このエラーメッセージはhtml_entity_decode関数が対象のcharsetがマルチバイトであるためハンドリングできないということを表しているようです。さらにhtml_entity_decode()関数のマニュアルにはPHP4.3.x以降のバージョンならEUC-JPやShift_JIS、UTF-8をサポートしているけれどこの関数はPHP5からしかマルチバイト文字列をサポートしていないという謎の文章が。

ここで考えられるエラーメッセージ発生の原因は2つあります。

1つは、質問者の環境がPHP4系でhtml_entity_decode関数のマルチバイトハンドリングが5以降しか対応していない場合です。この場合、修正にはhtml_entity_decodeしている部分を自前でdecodeする必要があるのであきらめて英語で作業したほうが良いきがします(ぇ

しかし、マルチバイトのハンドリングができない事を理由にするとEUC-JPだってエラーメッセージが出るはずです。なので質問者の環境ではマルチバイトハンドリングができているような気がします。

2つ目は、質問者がUTF-8への変換に失敗して不思議UTF-8になっている可能性。自分はこれが原因ではないかと考えています。BOM付きだったりBOMなしだったりUTF-16だのUTF-32だのとにかくUTF-8はなんだか似たようなものがたくさんあります。どのようなツールで変換したのか、ビューワからちゃんとみれているのかなどなど気になりますね。

というわけで参考になれば幸いです。