アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (2件)

やろうとしているのはこんな感じのこと?



http://ideone.com/B1fYb

まぁ場合によっては今回使ったCharBuffer decode(ByteBuffer)よりも
http://download.oracle.com/javase/7/docs/api/jav …

CoderResult decode(ByteBuffer,CharBuffer,boolean )の方が好きかもしれないけど。
http://download.oracle.com/javase/7/docs/api/jav …

この回答への補足

このコードで検出されませんでした・・・


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");
}
}
}

補足日時:2010/10/09 15:40
    • good
    • 0

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



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

この回答への補足

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

補足日時:2010/10/09 15:50
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!