2014-12-25 33 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它在等式中引发了另一种编码,它不是您的软件首先接收字符串的方式。但为了保留知识,我添加了所需的语句以将字符串文字转换为所需的编码。 –