0

エンコードの問題があります。同じコードでも、Android と Windows では異なる出力が生成されます。Android アプリケーションを変更できないため、Windows で解決策を見つける必要があります。これはコードです:

 public void test() throws UnsupportedEncodingException
{
    byte[] a = {-95, -10, -63, -74, 99, -10, 74, -56, -85, 105};
    String ab = new String(a,"UTF-8");
    System.out.println("out:"+Arrays.toString((new  StringBuilder(String.valueOf(ab))).toString().getBytes("UTF-8")));
}

出力:

out:[-17, -65, -67, -17, -65, -67, 118, 99, -17, -65, -67, 74, -56, -85, 105] (on Android)
out:[-17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, 99, -17, -65, -67, 74, -56, -85, 105] (on Windows)

Androidは「java.nio.charset.CharsetICU[UTF-8]」を使っているようです。助言がありますか?

ありがとう、アレックス

4

3 に答える 3

2

これは、{-95, -10, -63, -74, 99, -10, 74, -56, -85, 105} が有効な UTF-8 バイト シーケンスではないためです。new String(bytes, "UTF-8") は、このような状況で例外をスローしませんが、結果を予測するのは困難です。http://en.wikipedia.org/wiki/UTF-8無効なバイト シーケンス セクションを参照してください。

ISO-8859-1 を使用してみてください。バイトを 1 : 1 の文字に変換します

于 2013-04-26T15:56:44.887 に答える
0

最後に、Android の java.lang.String クラス [1] の String(byte[] data, int offset, int byteCount, Charset charset) のコードを使用して動作します。

[1] http://android.yongbok.net/repository/libcore/luni/src/main/java/java/lang/String.java

于 2013-04-27T21:54:10.290 に答える