如何解决将字符串转换为 UTF-16 编码 C#
我有几个 1252 编码、UTF-8 和 UTF-16 编码的字符串。最终我必须将所有字符串转换为 UTF-16 编码进行比较,我该怎么做? 我遇到了如果我们知道源编码我们可以转换为目标编码,但我需要将字符串(可能以任何格式编码)转换为 UTF-16(默认)
var url=@"file:///C:/Users/Œser/file.html";
Uri parsedurl;
var pass=Uri.TryCreate(url.Trim(),UriKind.Absolute,out parsedurl);
此时 parsedurl.AbsoluteUri 打印 file:///C:/Users/ %C5%92ser/file.html 这是预期的
然后我在 IE WebBrowserControl 中加载 html 文件 我拦截导航 strURL = URL.ToString(); 现在 strURL 打印 file:///C:/Users/%8Cser/file.html
解决方法
.NET string
值始终是 UTF-16(至少在 Utf8String
之前,它现在看起来像 .NET 7 或 .NET 8)。因此,大概您有一些字节或流以各种编码方式编码,您希望将它们转换为 UTF-16 string
实例。
这里的关键是Encoding
;例如:
var enc = Encoding.GetEncoding(1252);
var enc = Encoding.UTF8
-
var enc = Encoding.BigEndianUnicode;
(UTF-16,大端) -
var enc = Encoding.Unicode;
(UTF-16,小端)
您可以手动使用此编码(GetString(...)
、GetEncoder(...)
等) - 或者您可以将其作为可选构造函数参数传递给 TextReader
,例如 StreamReader
。
请注意,1252 在 .NET Core / .NET 5(仅限 .NET Framework)中可能不可用,因为它取决于操作系统编码目录。您可能不得不接受“西欧 (ISO)”(iso-8859-1,代码页 28591,即 Encoding.GetEncoding(28591)
)。
来自https://www.i18nqa.com/debug/table-iso8859-1-vs-windows-1252.html:
ISO-8859-1(也称为 Latin-1)与 Windows-1252(也称为 CP1252)相同,除了代码点 128-159 (0x80-0x9F)。 ISO-8859-1 在这个范围内分配了几个控制代码。 Windows-1252 有几个字符、标点符号、算术符号和商业符号分配给这些代码点。
类似地,如果您想再次获取字节,Encoding
可用于写入到任何选定的编码中 - 大概是使用任一 UTF-16 变体。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。