【发布时间】:2013-01-22 21:13:54
【问题描述】:
我只是在以字节流的形式从文件中读取一些数据,我刚刚遇到了一些我不确定如何最好地处理的 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 实际上提供了这样做的机制?
谢谢
【问题讨论】:
标签: java string unicode encoding