AIXのlocaleでハマった。
AIX上のWebSphere Application Server 6.1でiBatisを動作させたところ、マルチバイト文字を含むXMLファイルの読み取りに失敗した。
XMLファイル自体は、「encoding="UTF-8"」と記述されたUTF-8のファイルであり、全く問題はない。
結論としては、「AIXに『JA_JP』がインストールされていなかったこと」「AIXのdefault localeが『JA_JP』でなかったこと」が原因だった。
【ビックリその1】 "Ja_JP"と"JA_JP"って違うの?
まず、IBMのサイトを見て驚く。
ja_JP → IBM-eucJP
JA_JP → UTF-8
Ja_JP → IBM-943
って、なんだその仕様は。 「Ja_JP.ujis」とかじゃないのかよ。。。と思って、「locale -a」してみると、「JA_JP」がインストールされている環境では「JA_JP.UTF-8」とかも登録されていることがわかる。
【ビックリその2】 どうして、OSのdefault localeが、JavaでのXMLファイル読み取りに影響するの?
そもそも、XMLファイルに「encoding="UTF-8"」って書いてあるんだから、LC_ALL値がどうであれ、UTF-8で読んでほしいなぁ。あまつさえ、WAS実行ユーザのlocaleを「JA_JP」に変えてもダメだった。あくまで影響するのはAIXのdefault localeのようだ。なんでやねん。。。orz