Java : Java でUnicode文字列処理中に「�」という表示が出てくる現象。Replacement Character。
根本原因
*ブログのラベルは「Java」としましたが、「Unicode」「文字コード」と置くのが正確ですが、まぁそのへんはもう暗黙の前是ということで。Unicodeにおいて、なんらかの文字コードでマッピングが失敗する場合、その取扱いできない文字は「�」(U+FFFD)に置換されます。
プログラム内の文字列処理中にこの状況になると、当然「�」になってしまいます。
詳細は自分が説明するよりも、とても詳しいブログがあったので、ぜひそちらを → 「あしのあしあと : Javaにおける文字コード周りの話(5)」
自分が遭遇した状況
MySQLで、どこかのフィールド値が「NUL文字」(U+0000)の場合、これを取得すると「�」になっていました。[テーブル状況(簡易)]
id | str |
---|---|
1 | あいうえお |
2 | かきくNULLNULL |
↑をDAOなどでゲットすると、「1 : あいうえお、2 : かきく��」。
対応
U+0000以外にも同様の対応が必要な文字はあるので、とりあえずcharとして取扱い、OK/NG判定したりしました。この辺はプロジェクトの状況ごとに対応するしかないと思います。
コメント
コメントを投稿