我有一个从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仍然为我提供了垃圾字符,而不是纯文本“-”