【发布时间】:2010-10-25 16:23:25
【问题描述】:
我有一个从 Word 文档中读入的字符串。我认为它是“Cp1252”编码。 Java 使用 UTF8。
如何在该字符串中搜索 Cp1252 中的那些特殊字符并将其替换为适当的 UTF8 字符?
具体来说,我想用普通的“-”替换“En Dash”字符
以下代码块采用来自 Word 文档的 projDateString,并尝试做这样的事情
char[] test = projDateString.getBytes("Cp1252");
for(int i = 0; i < test.length; i++){
System.out.println "test["+ i + "] = " + Integer.toHexString((byte)test[i]);
}
String projDateString2 = new String(test);
projDateString2.replaceAll("\0x96", "\u2013");
System.out.println("projDateString2: " + projDateString)
我不确定我是否正确设置了 projDateString2。如您所见,当我使用 Cp1252 编码在字符串上获取字节时,该破折号的十六进制值为 ffffff96。如果我使用 UTF8 获取字节,它会以 3 个十六进制值的形式出现,而不是 1 个。
这给了我以下输出:
test[0] = 30
test[1] = 38
test[2] = 2f
test[3] = 32
test[4] = 30
test[5] = 31
test[6] = 30
test[7] = 20
test[8] = ffffff96
test[9] = 20
test[10] = 50
test[11] = 72
test[12] = 65
test[13] = 73
test[14] = 65
test[15] = 6e
test[16] = 74
projDateString2: 08/2010 ΓÇô Present
正如你所看到的,替换什么也没做,而 println 仍然给我垃圾字符而不是纯文本“-”
【问题讨论】:
-
Encoding conversion in java 的可能重复项