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
ISO-8859-1(也称为Code Page 1252 or Windows-1252)或Code page 437是两个非常着名的编码。
以上是关于java字符串中的特殊字符的主要内容,如果未能解决你的问题,请参考以下文章