2014-12-25 55 views
1

我在爲Windows Mobile編寫應用程序。我使用掃描,我得到一個字符串編碼ISO-8859-5.How我應該轉換爲UTF8字符串?將字符串從ISO-8859-5轉換爲UTF8

這裏是我的代碼

var str_source = "³¿±2"; 
     Console.WriteLine(str_source); 
     Encoding iso = Encoding.GetEncoding("iso-8859-5"); 
     Encoding utf8 = Encoding.UTF32; 
     byte[] utfBytes = utf8.GetBytes(str_source); 
     byte[] isoBytes = Encoding.Convert(utf8, iso, utfBytes); 
     var str_result = iso.GetString(isoBytes, 0, isoBytes.Length); 
     Console.WriteLine(str_result); 
+0

爲什麼說utf8但你使用utf32? –

回答

3

你不應該開始與編碼問題時使用字符串常量您的測試代碼。始終使用字節開頭。

 Encoding iso = Encoding.GetEncoding("iso-8859-5"); 
     Encoding utf = Encoding.UTF8; 

     var isoBytes = new byte[] { 228, 232 }; // фш 
     // iso to utf8 
     var utfBytes = Encoding.Convert(iso, utf, isoBytes); 
     // utf8 to iso 
     var isoBytes2 = Encoding.Convert(utf, iso, utfBytes); 

     // get all strings (with the correct encoding) 
     // all 3 strings will contain фш 
     string s1 = iso.GetString(isoBytes); 
     string s2 = utf.GetString(utfBytes); 
     string s3 = iso.GetString(isoBytes2); 

編輯:如果你想使用字符串文本,讓你開始,那麼你可以使用下面的代碼,以它們的編碼(Encoding.Unicode)改變爲預期「傳入文本」編碼:

 string stringLiteral = "фш"; 
     Encoding.Convert(Encoding.Unicode, Encoding.GetEncoding("iso-8859-5"), 
      Encoding.Unicode.GetBytes(stringLiteral)); // { 228, 232 } 
+0

「你永遠不應該......」爲什麼? –

+0

@ Adriano-Repetti它在等式中引發了另一種編碼,它不是您的軟件首先接收字符串的方式。但爲了保留知識,我添加了所需的語句以將字符串文字轉換爲所需的編碼。 –