Androidのアプリ開発をしていて、ちょっとしたトラブルに巻き込まれたので、メモっておきます。
なんでもない、お客さんから頼まれて、ダイアログに表示するメッセージを変更するだけの案件だったのですが、PDFに書かれた文字を、string.xmlにコピペしたところ、日本語が文字化けするようになってしまいました。
文字コードの問題かと思って、string.xmlを別のテキストエディタで開いて確認するも、文字コードや改行コードには問題がありません。あれやこれやと、いろいろな設定を見なおしてみるものの、文字化けが直りません。また、ダイアログに表示するのではなく、LogCatにリソースからメッセージを取り出して表示させるも、問題がありません。LogCatには文字化けせず表示されます。
5分で終わるはずの案件が、1時間以上も悩むことに・・・。
そこで、LogCatの吐き出すログを、ひたすら1つずつチェックしていくと、「TextLayoutCache::replaceThai」という奇妙なメッセージが出力されていることに気づきました。なぜ、タイ語に変換されなくてはならないのか・・・。
その後もしばらく悩むものの、ダイアログに別のメッセージを表示させると、問題なく表示されます。そこで、string.xmlの内容を一度消して、今度は、PDFからコピペするのではなく、一文字ずつ自分で打ち込んでみました。
すると・・・文字化けせず、正しく表示されました。若干、納得がいかないのですが、お客さんからもらったPDFの中にタイ語で使われている制御コードなどが紛れ込んでいて、それで、Androidのダイアログに表示するときにタイ語として表示されたので、文字化けしていたようです。うーむ、運が悪かったとしか言いようのないバグでした。久々に、つまらないことで悩んだので、メモまで。
ここから得られる教訓: