文字化けとの戦い

 「文字化けの問題は最後まで付きまとう」との助言を師から頂いていましたが、実際そうだと思いました。確かに文字化けの問題は、一度直面すると、非常に厄介です。なぜなら、文字化けの過程があやふやであるが故に、どこの箇所で文字化けが起こっているのか判断できないからです。原因の数も特定できませんから、結局考えられる原因をしらみつぶしに探すことになります。従って、膨大な時間がかかるんです。
 今回の問題は、PHP とデータベースの連携処理を実装する過程で起こりました。「神崎」というデータを取ってくるつもりが、「????」が返されるのです。データベース内の文字コードは、UTF-8 です。
 第一の原因は、PHP の設定の問題でした。PHP 自体を、UTF-8 に対応させていなかったんです。第一の原因を解決して、同じデータを持ってきたところ、今度は「逾槫エ 」と表示されました。
 第二の原因は、データベースへのデータ登録時の問題でした。もともと、「神崎」というデータは Shift-JIS だったので、Shift-JIS と宣言してデータベースに登録していたのですが、どうやら登録の途中で Shift-JIS の「神崎」は UTF-8 の「神崎」に変換されてしまうらしく、結局、UTF-8 のコードにさらに Shift-JIS → UTF-8 の変換を施してしまうみたいなんです。結果、あり得ない文字コードの文字が出来上がるわけです。
 もう文字コードなんてうんざりですね。