将UTF8字符串解码为拉丁语

时间:2011-02-26 21:44:35

标签: .net encoding

我正在尝试将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-Gerês”;

2 个答案:

答案 0 :(得分: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 :(得分: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));