java - 将字节数组转换为字符串(Java)

标签 java google-app-engine character-encoding bytearray

我正在 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/

相关文章:

google-app-engine - Google App Engine + Go + 提供静态文件 + 配置有什么问题

html - CSS 文件仅部分适用于 Google App Engine

C# 邮件主题解析

java - 有什么方法可以覆盖 Java 应用程序中的库类

java - libGDX 中的多个阶段将 Actor 隐藏在后台

java - 带有 Android 的 Google Cloud Endpoints - 缓存响应?

c++ - 1857 是 A 的另一个字符代码吗?

python - tokenize.detect_encoding(readline) 仅在 python3 中吗?

java - 为什么 Hibernate 抛出 "no identifier specified"?

java - Android 无法对 SD 卡进行写入和删除操作