【问题标题】:Http GET method returns file's content with wrong encodingHttp GET 方法返回编码错误的文件内容
【发布时间】:2020-08-12 22:46:58
【问题描述】:

我有一个简单的 GET 请求,它返回 .txt 文件的内容。您可以使用浏览器或 fiddler 进行尝试:http://134.17.24.10:8054/Documents/13f37b0c-4b04-42e1-a86b-3658a67770da/1.txt 此文件的编码为 cp-1251。当我尝试得到它时,我看到这样的东西: response text view

如何在 C# 中修改 HttpRequest 以获取所需编码的文本?或者只返回字节以便手动转换它们。 HttpClient可以吗?

另一个附件:

【问题讨论】:

  • 请点击 Raw 并在您的问题中显示请求和响应。同时显示您当前拥有的 C# 代码。
  • 那么你的问题是什么?如何更改从 ASP.NET 生成的响应的编码,或者如何更改使用 HttpClient 下载的字符串的编码?
  • 如何更改响应的编码。 (说实话,我更喜欢任何解决方案来获得文本的初始视图)
  • 顺便说一句,对不起,我不能上传源代码,因为它是私人项目的一部分。而且,所有带有Http的动作都被提取到单独的文件中,很难向你展示全貌。
  • 长话短说,这段代码 sn-p 可以描述我的问题(最后更新)

标签: c# http httpclient


【解决方案1】:

如果您无法更改服务器发送的字符集,是的,您仍然可以只请求字节,然后选择要应用的编码:

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
    
using (var httpClient = new HttpClient())
{   
    var response = await httpClient.GetByteArrayAsync(RequestUrl);
    var responseString = Encoding.GetEncoding("windows-1251").GetString(response, 0, response.Length - 1);

    Console.WriteLine(responseString);
}

参考资料: How to change the encoding of the HttpClient response

Encoding.GetEncoding can't work in UWP app

.NET Framework 类库提供了一个静态属性 CodePagesEncodingProvider.Instance,它返回一个 EncodingProvider 对象,该对象使桌面 .NET Framework 类库上的全套编码可供 .NET Core 应用程序使用。

https://docs.microsoft.com/en-us/dotnet/api/system.text.encodingprovider?redirectedfrom=MSDN&view=netcore-3.1

【讨论】:

  • 谢谢@Kimberly。这正是我正在寻找的(在服务器的字符集不可触摸的情况下)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-15
  • 2017-02-25
  • 1970-01-01
  • 2021-04-06
  • 1970-01-01
相关资源
最近更新 更多