Java 将字节数组(字节[])转换为字符串会更改一个特殊字符

Java 将字节数组(字节[])转换为字符串会更改一个特殊字符,java,string,encoding,byte,converter,Java,String,Encoding,Byte,Converter,在Java中,我尝试使用以下方法将字节数组(byte[])xml转换为字符串: String output = new String(myXMLbyteArray, "UTF-8"); 这是成功的,除了一个特殊的字符,急性撇号。当以十六进制比较输入和输出时,我有: 例如: 40变为40 00 55变为55 00 但是特殊字符92变为1920,而不是9200 我怎样才能优雅地解决这个问题?我尝试了默认字符串构造函数和其他编码,但都没有成功。我怀疑您想要的是ISO-8859-1,它将0-255

在Java中,我尝试使用以下方法将字节数组(
byte[]
)xml转换为字符串:

String output = new String(myXMLbyteArray, "UTF-8");
这是成功的,除了一个特殊的字符,急性撇号。当以十六进制比较输入和输出时,我有:

例如:

  • 40
    变为
    40 00
  • 55
    变为
    55 00
但是特殊字符
92
变为
1920
,而不是
9200


我怎样才能优雅地解决这个问题?我尝试了默认字符串构造函数和其他编码,但都没有成功。

我怀疑您想要的是ISO-8859-1,它将0-255转换为0-255。这意味着(字节)92=>(字符)92


你不能说55变成55 00,因为这不是你可以单独访问的两个字节,它是一个字符,如果你把它打印成十六进制,它将是0055或只有55。

你能给出一个更清楚的例子说明你在做什么吗,因为
92
变成
19 20
没有意义,例如
92 00
,使用UTF-8和大多数编码
40
将变为
40
,即它是ASCII且未更改。当我使用十六进制编辑器打开输入文本(字节[])时,例如,一个字符的十六进制值为55。当我打开输出文本(字符串)时,该字符现在的值为55 00,因为Java中的字符是2字节。这就是为什么您希望92变成92 00,但它变成19 20,这是另一个(无效)字符。55仍然是55,但实际上是0055,字节顺序是Java未指定的硬件细节。翻译成什么取决于您的编码。如果使用ISO-8859-1,它可能是0092,但是如果使用UTF-8,它是一个多字节字符的开头,因此它需要查看下一个字符才能将其转换为一个字符。您认为这是字符串构造函数中不同编码的问题吗?另外,1920(可以读作1920)是否是92的位移位出错了?若这是一个编码的问题,我会得到完全不同的数字吗?这是我在回答中建议的,除了编码很少是一个简单的转换。我现在尝试了ISO-8859-1,但我得到了完全相同的结果。我还尝试了US-ASCII,得到了相同的结果。我还尝试了UTF-16、UTF-16LE和UTF16-BE,但由于这中断了服务器调用,因此无法获得任何输出。我认为这与字节[]到字符串的转换有关,即每个字节到字符的转换,而不是编码。编码是从字节[]到字符串的转换。你能提供一个真实的例子,我可以运行复制你的问题吗?i、 e.实际的Java代码。