繁体   English   中英

Java unicode字节解析

[英]Java unicode byte parsing

我只是在从文件中读取一些数据作为字节流,我刚刚遇到一些unicode字符串,我不知道如何最好地处理。

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

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

通常我只使用正则表达式来替换零,因此删除空格。 但是,文件中的单词之间的空格是使用0x00 0x00实现的,所以尝试做一个简单的String'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

我只是在从文件中读取一些数据作为字节流,我刚刚遇到一些unicode字符串,我不知道如何最好地处理。

使用适当的字符集将它们转换为字符串,在本例中为UTF-16LE(little-endian UTF-16,首先是低位字节,然后是高位字节)

String str = new String(bytes, "UTF-16LE");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM