ハマるのはいつも文字コード…

DBから取得した文字列の全角⇔半角かな変換(記号含む)のロジックにて文字コードマジック(?)にハマる。開発環境はWindows、試験/運用環境はSoralis。FTPでソースをEUCに変換して試験/運用環境に転送しビルド…そして試験開始…試験環境では問題なし、しかし運用環境では変換が失敗する…

  • 開発環境:OS→SJIS
  • 試験環境:OS→EUC、DB→EUC
  • 運用環境:OS→EUC、DB→SJIS

が、Windowsから運用環境にアクセスして試験した場合にはうまくいく。でも運用環境上では全然ダメダメ。もしやと思い変換を行っているクラスを見てみると、半角かながずらずらとソースの中に書いてある…つまり試験環境ではソース(EUC)とDB(EUC)の文字コードが合っていたからうまくいっていた。でも試験環境ではソース(EUC)とDB(SJIS)で文字コードが違っていたので失敗していた。んで、開発環境のWindowsからつないだ場合、ソースはSJISコンパイルしていたのでDBと文字コードが合致してうまくいっていたと…

なのでソースの文字コードEUCに変換せずにそのまま転送し、SJISを指定してビルドしてみると予想通り変換がうまくいったのでした。はぁ、一旦読み込んじまえばUnicodeだから一緒だろ、なんて軽く考えていたのが悪かったらしい。勉強不足&試験環境と運用環境は同じにすべしを痛感した一日でした。