- 締切済み
Javaでの文字化けの検出
Javaでの文字化けの検出 byte配列をStringのコンストラクタの引数に指定してStringに変換した場合に 指定した文字コードで変換できなかった時、System.out.printlnでは"?"で表示されますが、 そのような状態を検出したいのですが、方法がわかりません。教えてください。 "?".equals(対象文字)をしてみてもイコールにならないようです... 文字コードはMS932 UTF-8 Unicodeでの使用になります。OSは日本語WindowsXPです。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- himajin100000
- ベストアンサー率54% (1660/3060)
やろうとしているのはこんな感じのこと? http://ideone.com/B1fYb まぁ場合によっては今回使ったCharBuffer decode(ByteBuffer)よりも http://download.oracle.com/javase/7/docs/api/java/nio/charset/CharsetDecoder.html#decode%28java.nio.ByteBuffer%29 CoderResult decode(ByteBuffer,CharBuffer,boolean )の方が好きかもしれないけど。 http://download.oracle.com/javase/7/docs/api/java/nio/charset/CharsetDecoder.html#decode%28java.nio.ByteBuffer,%20java.nio.CharBuffer,%20boolean%29
- crossgate
- ベストアンサー率65% (78/119)
参考URLのやりかたでどうでしょう?
補足
byte[] b = new byte[] { (byte) 0x80, (byte) 0x60 }; byte[] b2 = new String(b, "Unicode").getBytes(); こうすると、この文字についてはb≠b2でした。 ただ、以前も同じような方法でうまくいかなかった事例があったような気がするので もう少し調べてみようと思います。
補足
このコードで検出されませんでした・・・ import java.lang.*; import java.nio.charset.*; class Test { public static void main(String[] args) { try { CharsetDecoder cd = Charset.forName("Unicode").newDecoder(); cd = cd.onMalformedInput(CodingErrorAction.REPORT); System.out.println(cd.decode( java.nio.ByteBuffer.wrap(new byte[] { (byte) 0x80, (byte) 0x60 })) .toString()); } catch (Exception e) { System.out.println("err"); } } }