我已经用谷歌搜索了这个话题,并且已经查看了所有答案,但还是不明白。
基本上,我需要将UTF-8字符串转换为ISO-8859-1,并使用以下代码进行操作:
Encoding iso = Encoding.GetEncoding("ISO-8859-1");
Encoding utf8 = Encoding.UTF8;
string msg = iso.GetString(utf8.GetBytes(Message));
我的源字符串是
Message = "ÄäÖöÕõÜü"
但是不幸的是我的结果字符串变成了
msg = "�ä�ö�õ�ü
我在这里做错了什么?
5
.NET中的所有字符串都在内部使用Unicode字符存储字符串。没有字符串的概念是“ windows-1252”,“ iso-8859-1”,“ utf-8”等。您是否要丢弃字符串中没有Windows表示形式的任何字符? -1252代码页?
—
伊恩·博伊德
@IanBoyd实际上,字符串是UTF-16代码单元的计数序列。(不幸的是,
—
Tom Blodget
Encoding.Unicode
在Win32 API 中和Win32 API中都误用了Unicode术语。Unicode 是字符集,而不是编码。UTF-16是Unicode的几种编码之一。)
您执行了错误的操作:您使用utf8编码制作了字节数组,但是通过iso解码读取了它们。如果要使用编码的符号生成字符串,则可以简单地调用字符串msg = iso.GetString(iso.GetBytes(Message));
—
StuS
那就是Mojibake。
—
瑞克·詹姆斯
我猜Daniil所说的是
—
Qwertie
Message
从UTF-8解码而来的。假设该部分正常工作,则转换为Latin-1就像一样简单byte[] bytes = Encoding.GetEncoding("ISO-8859-1").GetBytes(Message)
。然后,就像StuS所说的那样,您可以使用Encoding.GetEncoding("ISO-8859-1").GetString(bytes)