我正在 Google 应用引擎中编写一个网络应用程序。它允许人们基本上编辑作为 .html
文件存储在 blobstore 中的 html 代码。
我正在使用 fetchData 返回文件中所有字符的 byte[]
。我正在尝试打印到 html 以便用户编辑 html 代码。一切都很好!
这是我现在唯一的问题:
字节数组在转换回字符串时出现一些问题。智能引号和几个字符看起来很时髦。 (?的或日文符号等)具体来说,我看到的几个字节具有导致问题的负值。
智能引号在字节数组中返回为 -108
和 -109
。为什么会这样?如何解码负字节以显示正确的字符编码?
最佳答案
字节数组包含特殊编码的字符(您应该知道)。转成String的方法是:
String decoded = new String(bytes, "UTF-8"); // example for one encoding type
顺便说一下 - 出现的原始字节可能显示为负小数,只是因为 java 数据类型 byte
是有符号的,它涵盖了从 -128 到 127 的范围。
-109 = 0x93: Control Code "Set Transmit State"
值 (-109) 是 UNICODE 中不可打印的控制字符。所以 UTF-8 不是该字符流的正确编码。
“Windows-1252”中的0x93
是您要查找的“智能引用”,因此该编码的 Java 名称是“Cp1252”。下一行提供了一个测试代码:
System.out.println(new String(new byte[]{-109}, "Cp1252"));
关于java - 将字节数组转换为字符串(Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5673059/