• 締切済み

Javaでの文字化けの検出

Javaでの文字化けの検出 byte配列をStringのコンストラクタの引数に指定してStringに変換した場合に 指定した文字コードで変換できなかった時、System.out.printlnでは"?"で表示されますが、 そのような状態を検出したいのですが、方法がわかりません。教えてください。 "?".equals(対象文字)をしてみてもイコールにならないようです... 文字コードはMS932 UTF-8 Unicodeでの使用になります。OSは日本語WindowsXPです。

みんなの回答

回答No.2

やろうとしているのはこんな感じのこと? 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

_fukky_
質問者

補足

このコードで検出されませんでした・・・ 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"); } } }

  • crossgate
  • ベストアンサー率65% (78/119)
回答No.1

参考URLのやりかたでどうでしょう?

参考URL:
http://d.hatena.ne.jp/cero-t/20100204/1265302329
_fukky_
質問者

補足

byte[] b = new byte[] { (byte) 0x80, (byte) 0x60 }; byte[] b2 = new String(b, "Unicode").getBytes(); こうすると、この文字についてはb≠b2でした。 ただ、以前も同じような方法でうまくいかなかった事例があったような気がするので もう少し調べてみようと思います。

関連するQ&A

専門家に質問してみよう