Java unicode字节解析

标签 java string unicode encoding

我正在从文件中以字节流的形式读取一些数据,我刚刚遇到了一些我不确定如何最好地处理的 unicode 字符串。

每个字符使用两个字节,只有第一个字节似乎包含实际数据,因此例如字符串“trust”在文件中存储为:

0x74 0x00(t) 0x72 0x00(r) ...and so on

通常我只是使用正则表达式将零替换为空,从而删除空格。但是,文件中单词之间的空格是使用 0x00 0x00 实现的,因此尝试执行一个简单的字符串“replaceAll”有点搞砸了。

我试过使用字符串编码集,例如“ISO-8859-1”和“UTF-8/16”,但每次都以空白结束。

我确实创建了一个简单的正则表达式来删除双零十六进制值,即:

new String(bytes).replaceAll("[\\00]{2,},"");

但这显然只适用于双零,我真的很想用空字符替换单零,用实际的 ASCII/Unicode 空格字符替换双零。

我可以发誓 Java 字符串格式设置之一可以处理这种事情,但我可能错了。那么我应该努力创建一个正则表达式来去除零,还是 Java 实际上提供了这样做的机制?

谢谢

最佳答案

那是 “UTF-16LE”0x00 0x00 实际上以 UTF-16 编码 NUL 字符,所以这就是您将得到的。

这种编码可以对大约一百万个不同的字符进行编码,每个字符使用 2 或 4 个字节。前 256 个字符用第二个字节 0x00 编码,如果文本仅包含这些字符,则它可能被视为无用,但其余字符则需要它。例如,欧元货币符号 将显示为 0xAC 0x20

关于Java unicode字节解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14749966/

相关文章:

java - 如何在 Eclipse 中导入和使用现有的库?

java - 以编程方式确定 java 实例的编译类型

java - 如何在数组中搜索字符串的一部分?

python - Python,UnicodeDecodeError

android - Android上的Unicode字符不显示

java - 在 Java 程序中删除一个单词

C 检查字符串是否与模板相似

javascript - 如何根据某些RegExp模式提取字符串的 "parts"?

python - 在 Windows 7 中导入 pymssql Unicode 解码错误

java - 在继承类中重载Javadoc