Java字符串 始终 在UTF-16中,至少就API而言......但是您通常可以将它们视为“
Unipre”。它们是UTF-16的事实仅在涉及基本多语言平面之外的字符(即Unipre值高于U + FFFF)时才真正相关。它们必须在Java中表示为
代理对 。但是我认为您不必为此担心。因此,只需将Strings中的值视为没有特定编码的“ Unipre文本” …尤其是绝对 不在
UTF-8或CP1252中。这些是用于将 二进制 数据(例如,字节数组)转换为文本数据(例如,字符串)的编码。
您不应该使用
String.getBytes()或
new String(byte[])不指定编码- 这就是 问题所在。那些总是使用平台默认编码-
这几乎 总是 错误的选择。
您说自己“已经从Word文档中读入了一个字符串”-您是如何读入的?它是如何开始生活的?
如果您有 字节, 并且知道相关的编码,则应使用:
String text = new String(bytes, encoding);
您永远不必处理使用错误编码创建的字符串-如果进入该阶段,您几乎 注定 会丢失信息。尽早解决问题,而不是稍后再尝试修复数据。
在 接下来的 事情要明白的是,
String在Java类是不可变的。调用
replaceAll字符串 不会更改现有字符串
。相反,它将返回包含已进行替换的 新 字符串。
所以这条语句:
projDateString2.replaceAll(" x96", "u2013");会 永远 做你想做的。即使其他一切正确,您也应该使用:
projDateString2 = projDateString2.replaceAll(" x96", "u2013");(或类似的内容)。我认为这实际上 并 不会满足您的要求,但是当您整理完所有其他内容时,您需要意识到这一点。



