我正在尝试将所有的Windows特殊字符转换为它们的Unicode等价物。我们有一个Flex应用程序,用户保存一些富文本,然后通过Java Emailer发送电子邮件给收件人。但是,我们一直遇到Word中的特殊字符,在电子邮件中只显示为问号。
目前为止,我已经尝试过:
private String replaceWordChars(String text_in) {
String s = text_in;
// smart single quotes and apostrophe
s = s.replaceAll("[\\u2018|\\u2019|\\u201A]", "\'");
// smart double quotes
s = s.replaceAll("[\\u201C|\\u201D|\\u201E]", "\"");
// ellipsis
s = s.replaceAll("\\u2026", "...");
// dashes
s = s.replaceAll("[\\u2013|\\u2014]", "-");
// circumflex
s = s.replaceAll("\\u02C6", "^");
// open angle bracket
s = s.replaceAll("\\u2039", "<");
// close angle bracket
s = s.replaceAll("\\u203A", ">");
// spaces
s = s.replaceAll("[\\u02DC|\\u00A0]", " ");
return s;
这个方法是可行的,但我不想手动将所有Windows-1252字符编码为它们相应的UTF-16字符(假设默认的Java字符集是UTF-16)。
然而,我们的用户不断发现Microsoft Word中有更多的字符,Java无法处理。因此,我进行了搜索,并找到了以下示例:
private String replaceWordChars(String text_in) {
String s = text_in;
try {
byte[] b = s.getBytes("Cp1252");
byte[] encoded = new String(b, "Cp1252").getBytes("UTF-16");
s = new String(encoded, "UTF-16");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return s;
但是当我在Eclipse调试器中观察编码时,没有任何变化。
处理Microsoft与Java之间的编码问题肯定有简单的解决方案。
有什么想法吗?