はまったのは以下のケース
・sqliteのsqlファイルを用意。sqlファイルの文字エンコーディングはUTF-8
・テーブルのtext型に文字列を格納。改行文字を\nとして格納
・android側でDBからデータを取得。文字をTextViewに設定すると\nがそのままviewに出力されていまう。
・\nを置換する。しかし、\nが置換されない。
というケースで半日はまった。
これでもjavaプログラマーなのかと自己嫌悪。
原因
・置換改行文字をUTF-8に変換していなかった。
最初は
String hoge = getDB();
hoge.setText(hoge.replaceAll("\\\\n", "\n"));
とやっていた。
だが、これはNG。すっかり忘れていたが、javaの文字列内部コードはISO-8859-1なのである。androidとて例外ではない。
脳がフレームワーク脳になっている。
ここは、パターンマッチに使う改行文字をUTF-8のコードに変換してやる必要がある。
以下、解決方法
byte[] bytes = "\\\\n".getBytes("ISO-8859-1");
String new_line = new String(bytes, "UTF-8");
これでUTF-8の改行パターンマッチが取得できる。
あとは普通にreplaceAllを使う
hoge.setText(hoge.replaceAll(new_line, "\n"));
これで思い通りの結果が出力される。
ps
スマートフォンアプリの開発では英語力があったほうが良い。
これはiphoneもandroidでも共通だ。
ドキュメントや講義のyoutubeが英語が中心だからだ。
仕方なしに空き時間には英語の勉強もちょこちょこやっているのだが、英語ができるようになればなるほど日本語が好きになるのが不思議だ。
英語が世界共通語だから英語メインになっていくのは仕方ないが、英語に触れれば触れるほど、
日本人ということを強く意識するようになるは皮肉なものである。
0 件のコメント:
コメントを投稿