Java字符串中的特殊字符

时间:2018-09-04 08:50:45

标签: java arrays string char byte

我正在寻找在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构造函数中

1 个答案:

答案 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

Try it online.

ISO-8859-1(也称为Code Page 1252 or Windows-1252)或Code page 437是两种非常著名的编码。