如何将 System.Text.Encoding.GetEncoding("") 函数用于 C# - .Net Core 中支持的 8 以外的其他字符集?

Βασ*_*δης 1 c# encoding codepages .net-core

我正在尝试使用 C# 中常见初始化编码页面之外的编码页面。

var greekEncoding = System.Text.Encoding.GetEncoding("1253");
using (var httpClient = new HttpClient())
        {
            var httpContent = new StringContent(xmlString, greekEncoding, "text/xml");
            return await httpClient.PostAsync(baseUrl, httpContent);
        }
Run Code Online (Sandbox Code Playgroud)

System.Text.Encoding有一个函数GetEncoding("iso-8859-7")GetEncodings(),它返回所有可能的编码页面。

当我尝试检索“ISO-8859-7”或“Windows-1253”等编码页面时,默认情况下不会注册编码页面,结果是无法识别的字符。

如何在我的 dotnet core 解决方案中注册所有代码页?

Βασ*_*δης 6

经过很多天的搜索,我在 .net-core 中发现,我们必须在Encoding中插入注册

这个问题的解决方案是在编码类中注册一个提供者。

EncodingProvider provider = CodePagesEncodingProvider.Instance;
Encoding.RegisterProvider(provider);
Run Code Online (Sandbox Code Playgroud)

只需将这两行放入 Startup.cs 或 Program.cs 或 Main.cs 中,您的解决方案将注册提供程序以使用所有不常见的字符集。

常见编码页面:

  1. UTF7
  2. UTF8
  3. UTF32
  4. 统一码
  5. UTF-16BE(BigEndianUnicode)
  6. ASCII码
  7. 拉丁语1
  8. 默认(计算机编码页面)

该解决方案已在此网页(https://learn.microsoft.com/en-us/dotnet/api/system.text.codepagesencodingprovider?view=net-6.0#remarks)中进行了解释,但没有示例。

这种误解出现在dotnet core中。