我有一些测试代码没有按照我的预期工作,在审查了各种网站和规范后,我仍然无法弄清楚发生了什么.
这是我的测试代码:
byte[] b = new byte[8];
b[0] = (byte)0x72;
b[1] = (byte)0x3A;
b[2] = (byte)0x60;
b[3] = (byte)0x01;
b[4] = (byte)0x0E;
b[5] = (byte)0x10;
b[6] = (byte)0x8A;
b[7] = (byte)0x11;
String bitmapStr = new String(b);
try {
b = bitmapStr.getBytes("US-ASCII");
} catch (Exception ex) {
ex.printStackTrace();
}
System.out.println("DEBUG: bitmapStr = \"" +bitmapStr + "\"");
for (int i=0; i<=7; i++) {
int byte1 = b[i];
System.out.println("byte"+i + ": " + Integer.toHexString(byte1));
}
当我运行程序时,我在控制台输出中得到以下内容:
DEBUG: bitmapStr = "r:`�"
byte0: 72
byte1: 3a
byte2: 60
byte3: 1
byte4: e
byte5: 10
byte6: 3f
byte7: 11
看看byte6,即我的字节数组中的b [6]如何输出0x3F,但它应该是0x8A.
有什么想法吗?
顺便说一句,如果我使用UTF-8编码,我会得到一个更加时髦的输出(虽然ASCII是正确的).
UTF-8字符串编码输出:
byte0: 72
byte1: 3a
byte2: 60
byte3: 1
byte4: e
byte5: 10
byte6: ffffffef
byte7: ffffffbf
解决方法:
尝试另一种形式的String构造函数:
String bitmapStr = new String(b,"ISO-8859-1");
标签:java,string,bytearray,ascii
来源: https://codeday.me/bug/20190725/1536652.html