我正在寻找在0xFE, 0xFF ( > 127)
之类的Java字符串中插入特殊的1字节字符的解决方案。
我需要使用String而不是字节数组,因为类的方法仅需要String类型。
我在String = {0x07 0xAA 0x03 FF}
中需要什么。是的,它是用于设备控制的特殊字符。
然后我尝试将String结构用作:
byte[] arr = {0x07, (byte) 0xAA, 0x03, (byte) FF};
String s = new String(arr, "UTF-8");
// utf-8用于1个字节的字符,我也尝试了ascII,但结果是相同的
所有运算符都可以达到数组中char的值127(dec),但是在给String(字符串)中的1个或2个其他字节带来奇怪的结果之后,当然发生了,因为字节类型的最大值为127。但是如何解决这种情况呢? ?需要帮忙。
我的理解是我无法将char []添加到String构造函数中
答案 0 :(得分:2)
您的问题的一部分不正确。 UTF-8仅将[32,126]
范围内的可打印ASCII字符存储为单个字节(每个字符超过2甚至3个字节),即使编码通常长256个字节。由于在Java中所有字符串默认情况下都会自动存储并打印为UTF-8,因此在打印时它们将保留1个字节以上。
您需要的是一种在访问字节时将所有[1,256]
个前字节存储为单个字节的编码。例如,使用您当前的代码:
byte[] arr = {0x07, (byte) 0xAA, 0x03, (byte) 0xFF};
String s = new String(arr, "UTF-8");
System.out.println(s.getBytes().length); // This prints 8
System.out.println(s.getBytes("UTF-8").length); // This prints 8 as well (since the default is UTF-8)
System.out.println(s.getBytes("Windows-1252").length); // This prints 4
ISO-8859-1(也称为Code Page 1252 or Windows-1252)或Code page 437是两种非常著名的编码。