2011-12-08 19 views
1

我試圖將這個字符串的編碼從utf-8轉換爲ukranian「ÐÑайвÐμÑ-Ð'лÑ-пÑинÑÐμÑа-Pixma-ip- 2000Ð'лN-Windows的7-64-d±DN」。 每當我把它轉換從UTF8到烏克蘭,我收到了損壞的串...C# - 將UTF-8轉換爲烏克蘭編碼

正確的字符串應該像 「Драйвер-для-принтера - 佳能PIXMA-IP-2000-для-Windows的7-64-бит」 ..

請指教..謝謝

編輯:這裏是如何轉換我吧..

private string EncodeUTF8toOther(string inputString, string to) 
     { 
      try 
      { 
       // Create two different encodings. 
       byte[] myBytes = Encoding.Unicode.GetBytes(inputString); 

       // Perform the conversion from one encoding to the other.    
       byte[] convertedBytes = Encoding.Convert(Encoding.Unicode, Encoding.GetEncoding(to), myBytes); 

       return Encoding.GetEncoding("ISO-8859-1").GetString(convertedBytes); 

      } 
      catch 
      { 
       return inputString; 
      } 
     } 

烏克蘭字符集是 「KOI8-U」

更多信息:我有這個問題的類似問題: c# HttpWebResponse Header encoding

位置標題是給我這個損壞的字符串。我需要正確編碼才能執行重定向。

+4

你是如何轉換它? –

+1

你的字符串看起來像「免打擾°Ð¹Ð²Ðμ......」從一開始?然後它已經損壞。 – deceze

+0

發佈更新..請檢查它。 – SolidSnake

回答

1

Encoding.Unicode是UTF-16,不是UTF-8。如果您確定您的源字符串是使用UTF-8編碼的,請改用Encoding.UTF8。

而返回一個字符串沒有任何意義。字符串始終以UTF-16編碼。只有在讀取和寫入字符串時,您才應該擔心編碼。

閱讀時,使用Encoding.UTF8.GetString從二進制數據創建一個UTF-16字符串。編寫代碼時,可以使用Encoding.GetEncoding(destinationEncoding).GetBytes來獲取二進制數據並直接寫入,或者使用StreamWriter構造函數的重載(或任何您使用的對象)來指定編碼。

+0

我把它改成UTF8,我還在適應損壞的數據... – SolidSnake

+0

我已經更新注意到別的東西是錯誤的之後,我的答案。 –

0

您需要字符串輸入正確解碼,就像這樣:

StreamReader rdr = new StreamReader(args[0], Encoding.UTF8); 
string str = rdr.ReadToEnd(); 
rdr.Close(); 

是物理,你必須知道它是什麼編碼

上。另一方面,是合乎邏輯的。 用於內部字符串的編碼對你來說不重要; 除此之外它可以表示什麼字符; 它可以表示所有字符,因爲內部編碼是用於Unicode的。 (如果內部編碼爲KOI-8德語或法語字符無法表示。)

這是輸出您有關於編碼擔心起來。

如果您沒有在輸入和輸出上指定編碼,則假定爲平臺默認值。 這可能不是你想要的。 知道並指定輸入和輸出的編碼是一種很好的做法。

0
"ÐÑайвеÑ-длÑ-пÑинÑеÑа-Pixma-ip-2000-длÑ-Windows-7-64-биÑ". 

它已經是UTF-8!您不必進行任何轉換。讓Windows知道它的UTF-8。像這樣的事情會做這項工作:

wb.Encoding = Encoding.UTF8;