2011-02-26 59 views
1

我試圖將UTF8字符串轉換爲拉丁字符。將UTF8字符串解碼爲拉丁文

這裏是我如何努力實現這樣的例子:

string sUnicode ="Peneda-Gerês"; 
string result = Encoding.Unicode.GetString(Encoding.Convert(Encoding.UTF8, Encoding.Unicode, Encoding.UTF8.GetBytes(sUnicode))); 

MessageBox.Show(result); 

的字符串返回的是一樣的嗎?不用找了?

我在想什麼?

如果我去這個網站

http://software.hixie.ch/utilities/cgi/unicode-decoder/utf8-decoder

,並把相同的文本,它得到正確解碼爲「Peneda-GERES」;

+2

你是將UTF-8轉換爲UTF-8。爲什麼會顯示不同的字符串? – Oded 2011-02-26 21:47:53

+0

我寧願將數據放在文本文件中,而不是放在源代碼中。但是,這看起來像是一個破損的UTF-8(它被「編碼」爲UTF-8「兩次」),因此它是一個破碎的字節序列,並不是很適合放在C#字符串中。爲什麼不使用外部工具來修復破損的文本? – 2011-02-26 22:00:15

+1

.NET字符串始終以Unicode(UTF-16)編碼,因此您的原始字符串不是UTF-8 ...如果您正在讀取或寫入流(或者如果將字符串轉換爲字符串來自/從一個字節數組) – 2011-02-26 22:02:19

回答

3

源字符串是ISO-8859-1

運行這一點,並選擇正確的編碼器:

string sUnicode = "Peneda-Gerês"; 
foreach (var enc in Encoding.GetEncodings()) 
{ 
    Console.WriteLine("{0} {1}" 
     , Encoding.UTF8.GetString(enc.GetEncoding().GetBytes(sUnicode)) 
     , enc.Name); 
} 

或將要發現的:

string result = Encoding.UTF8.GetString(
    Encoding.GetEncoding("ISO-8859-1").GetBytes(sUnicode)); 
1

您正在從unicode轉換爲utf8爲unicode。所以結果與來源相同。

 byte[] byteAr = { 
          (byte) 'P', (byte) 'e', (byte) 'n', (byte) 'e', (byte) 'd', (byte) 'a', (byte) '-', 
          (byte) 'G', (byte) 'e', (byte) 'r', (byte) 'Ã', (byte) 'ª', (byte) 's' 
         }; 

     var result = Encoding.Unicode.GetString(Encoding.Convert(Encoding.UTF8, Encoding.Unicode, byteAr)); 
+0

謝謝,我明白了,謝謝你的快速回應:) – 2011-02-26 22:38:22