【发布时间】:2023-03-27 19:58:02
【问题描述】:
我已经用谷歌搜索了这个主题,并且查看了每个答案,但我仍然不明白。
基本上我需要将 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 = "�ä�ö�õ�ü
我在这里做错了什么?
【问题讨论】:
-
.NET 中的所有字符串都使用 unicode 字符在内部存储字符串。没有字符串是“windows-1252”、“iso-8859-1”、“utf-8”等的概念。您是否试图丢弃字符串中没有在 Windows 中表示的任何字符-1252 代码页?
-
@IanBoyd 实际上,String 是 UTF-16 代码单元的计数序列。 (不幸的是,Unicode 一词在
Encoding.Unicode和 Win32 API 中被误用。Unicode 是一种字符集,而不是一种编码。UTF-16 是 Unicode 的几种编码之一。) -
你做了不正确的动作:你用utf8编码制作字节数组,但通过iso解码读取它们。如果你想用编码符号制作字符串,只需调用 string msg = iso.GetString(iso.GetBytes(Message));
-
那叫 Mojibake。
-
我猜 Daniil 的意思是
Message是从 UTF-8 解码的。假设该部分工作正常,转换为 Latin-1 就像byte[] bytes = Encoding.GetEncoding("ISO-8859-1").GetBytes(Message)一样简单。然后,就像 StuS 所说,您可以使用Encoding.GetEncoding("ISO-8859-1").GetString(bytes)将 Latin-1 字节转换回 UTF-16
标签: c# .net encoding utf-8 iso-8859-1