以前開発したシステムで、PC向けの会員サイト構築で問題になった文字化け問題について
お話したいと思います。
問題になった文字は、一般の方も認知されている機種依存文字(丸文字、略称等)ではなく
全角マイナスでした。
住所を全角で入力する場合、みなさんはどのように入力するでしょうか?
横棒ひとつにしてもこれだけのパターンがあります。
そしてこの中で一番自然に見えるのが、全角マイナスではないでしょうか?
そこで1番の全角マイナスを登録すると、Windows環境では問題ありませんが、
Mac環境(OS X)で登録すると、DBに文字化けして登録されてしまいます。
環境については、以下に記します。
------------------------------------------------------
DBサーバ: SQLServer2005 照合順序 Japanese_90_CI_AS
WEBサーバ
・言語・・・PHP5
・文字コード・・・表示、内部共にUTF-8
DB接続ドライバ
・freetds
------------------------------------------------------
なぜこのような現象が発生してしまうのかいろいろと調べたところ、
MACで全角マイナスを入力すると「E28892」のコードが優先的に使われます。
Windowsの場合は「EFBC8D」のコードが使われます。
このデータを、画面がShift-JISで作成されたWindows環境の別システムで表示しようとして
WindowsのShift-JISに変換できず文字化けが発生してしまいました。
他にもわかっている範囲では、全角チルダ、セント、ポンド、縦棒(|が二本あるもの)、ノット
が文字化けを起こすことがわかりました。
対処方法としては、WindowsのShift-JISに変換できるコードに変換してから
DBに登録する方法をとりました。
クライアントの環境が特定できないシステムや、文字コードが混ざっているシステムは
気をつけなければいけませんね。