我試圖將所有Windows特殊字符轉換爲它們的Unicode等效項。我們有一個Flex應用程序,用戶保存一些Rich Text,然後通過Java Emailer通過電子郵件發送給他們的收件人。然而,我們仍然在運行Word中的特殊字符,這些字符只是在電子郵件中顯示爲?將Windows-1252轉換爲Java中的UTF-16
到目前爲止,我已經試過
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字符集是什麼)
但是,我們的用戶不斷從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調試器中編碼發生,沒有什麼變化。
必須有一個簡單的解決方案來處理微軟可愛的Java編碼。
有什麼想法?
在第一種情況下,你只是用ASCII字符替換非ASCII字符。你根本沒有改變*編碼*。在第二段代碼中,除了將所有無法由Cp1252處理的字符轉換爲「? –
Ok @JonSkeet關於用它們的ASCII等價物替換所有非ASCII字符的想法嗎? – idonaldson
@CodingGuy並非所有的非ASCII字符都有相應的ascii ... ASCII字符少於128個字符,並且有超過100,000個Unicode字符。你需要弄清楚如何正確發送電子郵件。發送的電子郵件是什麼編碼?它應該是UTF-8,然後你不必刪除非ASCII字符。 – bames53