2010-10-08 61 views
2

我檢索一個流。 一切工作正常,但Umlaute(ä,ö,ü,ß)的編碼。Umlaute被錯誤編碼!

什麼是

NäüßÖ'sas所以viele Umlaute

成爲

NäüÃÃÂ'sas所以viele Umlaute

我試過的ASCII編碼以及其他一些來源如下所示OWS。

ASCIIEncoding encoder = new ASCIIEncoding(); 
Encoding enc = Encoding.GetEncoding(28591); 

string response = enc.GetString(message, 0, bytesRead); 

哪一個能解決我的問題?

+0

您可能需要使用unicode,因爲某些字體會將其特殊字符放在不同的位置。 – JoshD 2010-10-08 19:57:30

回答

6

我不知道任何關於.NET,但我知道,這種模式的mojibake

äüÃà

是UTF-8被誤解爲ISO-8859-1的特性。因此請嘗試將您的輸入處理爲UTF-8。

+0

好吧,這有助於提出另一個問題。 查看我將在幾分鐘後發佈的問題。 – Hedge 2010-10-08 20:24:02

5

以下字符äüßÖ都不是ASCII碼。

您應該使用相同的編碼,他們在(可能是UTF-8):

Encoding enc = new UTF8Encoding() 
string response = enc.GetString(message, 0, bytesRead); 

您所使用的代碼頁(28591)是mapped爲ISO-8859-1,其中包括這些字符但是它們可能被編碼爲UTF-8(或另一個unicode變體),但不是iso-8859-1。您需要使用正確的編碼才能獲得正確的編碼字符。

0

如果您需要8位編碼,請使用支持德文字符的ISO-8859-2(或Latin 2)。或者,如果可以,請使用一些UNICODE編碼,如UTF-8。在後一種情況下,讓編碼器在字符流的開始處包含BOM(字節順序標記),以便讀取或顯示輸出的應用程序可以正確推斷編碼。