java字符串中的特殊字符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java字符串中的特殊字符相关的知识,希望对你有一定的参考价值。

我正在寻找在java字符串中插入特殊1字节字符的解决方案,如0xFE, 0xFF ( > 127)

我需要使用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)值,但是在它之后给出奇怪的结果,比如字符串中的1或2个额外字节,当然它出现了因为字节类型的最大值为127.但是如何修复这种情况?需要帮忙。

我怎么理解我不能将char []添加到String构造函数中

答案

你问题的一部分是不正确的。 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是两个非常着名的编码。

以上是关于java字符串中的特殊字符的主要内容,如果未能解决你的问题,请参考以下文章

如何在导航抽屉活动模板中的片段之间传递字符串变量

将字符串数据从Activity发送到片段[关闭]

java导出 Excel时,对特殊字符编码后的字符串进行解码

js判断字符串是不是含有特殊字符和emoji表情

java字符串中的特殊字符

String的replace方法怎么转换带有特殊字符的子字符串?