2011-02-26 60 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