【问题标题】:Cyrillic symbols show as question marks. Content-Type:text/xml;charset=windows-1251;西里尔符号显示为问号。内容类型:文本/xml;字符集=windows-1251;
【发布时间】:2020-06-26 01:47:41
【问题描述】:

我知道这是一个很受欢迎的问题,但我仍然没有找到任何解决方案。

所以我从 api 获取 xml 文件作为响应,但西里尔符号表示为问号。

我尝试使用 Encoding 类转换源字节数组。

using (var httpClient = new HttpClient())
{
   var response = await httpClient.GetAsync(uriBuilder.Uri);
   var responseBytes = await response.Content.ReadAsByteArrayAsync();
   var responseText = Encoding.UTF7.GetString(responseBytes);
   var utf8 = Encoding.UTF8.GetString(responseBytes);
   var unicode = Encoding.Unicode.GetString(responseBytes);
   var ascii = Encoding.ASCII.GetString(responseBytes);
   var defaultt = Encoding.Default.GetString(responseBytes);
}

但还是没有运气。

响应字符集:

Content-Type: text/xml;charset=windows-1251;

有人可以提出任何解决方案吗?

更新: 答案是我下面的评论

【问题讨论】:

  • 你用什么来查看结果?我不认为它是反序列化,它是查看器。
  • @jdweng 这是来自 JetBrains 的 Rider
  • 它看起来像一个控制台窗口。所以你必须设置控制台的属性来匹配编码。请注意是否更改默认编码是否有帮助。请参阅:jetbrains.com/help/idea/…

标签: c# xml encoding


【解决方案1】:

here 所述,您可以使用Encoding.GetEncoding(1251).GetString(responseBytes); 来获得所需的编码。

请记住,操作系统需要支持代码页。

【讨论】:

    【解决方案2】:

    所以解决办法是:

    Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
    var encoding = Encoding.GetEncoding("windows-1251");
    var result = encoding.GetString(responseBytes);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-01
      • 2018-02-19
      • 1970-01-01
      • 1970-01-01
      • 2012-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多