- 締切済み
Javaで割り当てられていない文字コードを判別
javaで文字をDrawStringする際に描画対象の文字コードに対して文字が割り当てられていないコードだった場合に特定の文字に置き換える処理を作りたいのですが、その判別方法が分かりません。 外字も対象範囲なのですが、外字登録されているものされていないものを判別しなければいけません。 文字コードはUTF-8です。 どなたかご教授のほど宜しく御願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- Tacosan
- ベストアンサー率23% (3656/15482)
Font クラスの canDisplay メソッドでなんとかなる... か?
- salsberry
- ベストアンサー率69% (495/711)
Unicodeの私用領域の文字だったら、Character.getType(char)の結果がCharacter.PRIVATE_USEと一致するかどうかを見ればいいのでは。
お礼
回答ありがとうございます。明日職場で早速試して見ます。 javadocなどいろいろ見たのですがかゆいところが載っていません。 ご指摘いただいた定数定義などもよくわからない説明しかありません。英語版を読むとのっているのでしょうか? font.canDisplayなども試してみましたが。文字が割り当てられていない文字コードでもtureが帰ってきてしまいます。
補足
教えていただいた方法を試してみました。 何故か割り付けられていないコードでもprivate_useと一致しています。見分けがつけられません。
- Tacosan
- ベストアンサー率23% (3656/15482)
えぇと, 「描画対象の」ってことは, ひょっとして 特定のフォントで割り当てられているかどうか を知りたいってこと?
お礼
見当はずれな質問かもしれませんがご親切に対応いただきありがとうございます。
補足
そそうなんです。具体的にはMS明朝のU+E000に文字が割り当てられているかどうかを判別したいんです。 もっと具体的に書くとDrawStringした時に割りあたってないコードの場合は空白が出てしまうのですが、その空白をエラー判別文字(任意に決めた文字、たとえば'?'など)に置き換えたいのです。 drawされた画像を見たときにエラー文字が含まれてるって分かるために。 javaでは出来ないことなんでしょうか。 そこの理解までまだいたっていません。
- Tacosan
- ベストアンサー率23% (3656/15482)
ある程度は Character.isDefined でできそうだけど, まず間違いなく完璧ではない. 「コードに文字を割り当てる」のは Java ではなく Unicode Consortium の仕事だし, Java のバージョンによって対応する Unicode のバージョンが違う (そして「コードに文字が割り当てられているかどうか」も変わる). そもそも「外字登録」ってどういうこと?
お礼
回答をありがとうございます。 教えていただいたcharcter.IsDefined()を試しましたが、どの文字をいれてもtrueが帰ってきてしまいます。 U+FFFF,U+FFFEのみfalseが帰ってくるようです。全部は試していませんが。 このメソッドが使用しているunicodeDataファイルについて全く知識がないためそこを調べてみようと思います。
補足
外字登録とは外字の範囲で文字が割り当てられていることをいっています。 分かりにくくてすみません。 とりあえず教えていただいた方法を試してみます。
補足
試してみましたcanDisplay。すべての外字コードにたいしてtrueを返します。なぜ文字が割り当たっていないのに描画可能なんでしょうか。よくわかりません。空の場合はぐりふありとしているのでしょうか。