C# 无法将文本从一种编码解码为另一种编码

C# 无法将文本从一种编码解码为另一种编码,c#,character-encoding,C#,Character Encoding,我从html网站上读到一些文本,需要存储数据。我从网站上知道源编码(iso-8859-1)和目标编码(windows-874) 源文本是“áÁÃÔÁ”,我需要将其转换为”แม่ริม" 但是,输出总是“???????”,即[63,63,63,63,63,63]的数组 string text = "áÁèÃÔÁ"; Encoding fromEncoding = Encoding.GetEncoding("iso-8859-1"); Encoding toEncoding = Encoding.G

我从html网站上读到一些文本,需要存储数据。我从网站上知道源编码(iso-8859-1)和目标编码(windows-874)

源文本是“áÁÃÔÁ”,我需要将其转换为”แม่ริม" 但是,输出总是“???????”,即[63,63,63,63,63,63]的数组

string text = "áÁèÃÔÁ";
Encoding fromEncoding = Encoding.GetEncoding("iso-8859-1");
Encoding toEncoding = Encoding.GetEncoding("windows-874");
byte[] fromBytes = fromEncoding.GetBytes(text);
byte[] toBytes = Encoding.Convert(fromEncoding, toEncoding, fromBytes);
string result = toEncoding.GetString(toBytes);
预期结果是“แม่ริม"
实际结果是“???”这是错误的

两种编码之间的差值是160。一个小写字母和另一个大写字母也是如此

            string iso = "áÁèÃÔÁ";
            string[] isoBytes = iso.Select(x => ((byte)x).ToString()).ToArray();
            Console.WriteLine("Iso " + string.Join(",",isoBytes));

            string win = "แม่ริม";
            string[] winBytes = win.Select(x => ((byte)x).ToString()).ToArray();
            Console.WriteLine("Windows " + string.Join(",",winBytes));

            Console.ReadLine();

看看这个答案,你不应该转换任何东西。字节已经是你想要的了。你只需要解释它们。HTML中的所有文本都是Unicode,不管文档编码如何。因此,一旦你使用HTML解析器获得了合适的文本,它就已经是字符串了(当然它不会是áÁÃÔÁ)。