Java : Java でUnicode文字列処理中に「�」という表示が出てくる現象。Replacement Character。

根本原因

*ブログのラベルは「Java」としましたが、「Unicode」「文字コード」と置くのが正確ですが、まぁそのへんはもう暗黙の前是ということで。

Unicodeにおいて、なんらかの文字コードでマッピングが失敗する場合、その取扱いできない文字は「�」(U+FFFD)に置換されます。

プログラム内の文字列処理中にこの状況になると、当然「�」になってしまいます。
詳細は自分が説明するよりも、とても詳しいブログがあったので、ぜひそちらを → 「あしのあしあと : Javaにおける文字コード周りの話(5)

自分が遭遇した状況

MySQLで、どこかのフィールド値が「NUL文字」(U+0000)の場合、これを取得すると「�」になっていました。

[テーブル状況(簡易)]
idstr
1あいうえお
2かきくNULLNULL

↑をDAOなどでゲットすると、「1 : あいうえお、2 : かきく��」。

対応

U+0000以外にも同様の対応が必要な文字はあるので、とりあえずcharとして取扱い、OK/NG判定したりしました。
この辺はプロジェクトの状況ごとに対応するしかないと思います。

コメント

このブログの人気の投稿

windows10 で nvidia のグラボのcode43現象を解決した

Java : processbuilder 標準出力 タイムアウト

GTX560Ti がおかしい(code 43が出る)(2018年)→解決しました(2019)