4

我只是在从文件中读取一些数据作为字节流的过程中,我刚刚遇到了一些我不确定如何最好地处理的 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实际上提供了这样做的机制?

谢谢

4

2 回答 2

7
于 2013-02-07T11:27:44.697 回答
5

I'm just in the process of reading some data from a file as a stream of bytes, and I've just encountered some unicode strings that I'm not sure how best to handle.

Convert them to strings using the appropriate charset, in this case UTF-16LE (little-endian UTF-16, with the low-order byte first followed by the high-order byte)

String str = new String(bytes, "UTF-16LE");
于 2013-02-07T11:32:19.990 回答