【问题标题】:Can't get the web content with UTF-8无法使用 UTF-8 获取 Web 内容
【发布时间】:2017-04-29 08:51:52
【问题描述】:

我正在尝试通过 webclient 获取字符串,它有日语字符,但它显示这些字符,�^�p�Ǘ�。

var url= "http://www.itmedia.co.jp/im/articles/0609/14/news117.html";

using (var w = new WebClient())
{
   w.Encoding = Encoding.UTF8;
   var htmlData= w.DownloadString(url);
}

json_data 的值不显示日文字符。

您能告诉我为什么即使我将其编码为 UTF-8,它也不会转换为日文字符吗?

【问题讨论】:

  • 在 Firefox 中下载并执行“工具”->“页面信息”,您会看到编码实际上是 Shift_JIS。如何使WebClient 自动检测编码,请参阅this answer
  • @dbc ^ 这完全是最好的答案。谢谢老兄。

标签: c# asp.net json encoding utf-8


【解决方案1】:

我将代码从 UTF-8 更改为 shift_jis。

w.Encoding = Encoding.GetEncoding("shift_jis");

【讨论】:

    【解决方案2】:

    根据第3行view-source,它是用shift-jis编码的:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html lang="ja" id="masterChannel-enterprise"><head>
    <meta http-equiv="content-type" content="text/html;charset=shift_jis">
    

    【讨论】:

    • 但是如果您没有正确的编码,您将无法到达该行。试着想象一下如果你是浏览器你会做什么。代码采用 UTF-8 编码。
    【解决方案3】:

    如果你用 Postman 打开页面,你可以看到响应的标题。

    如图所示,响应是用 gzip 压缩的。这可能是导致您看到的混乱响应的原因。

    WebClientnowadays 支持自动解压 gzip,但it wasn't that way always。 (如果我在 Windows 10 上的 .NET 4.6.2 上运行您的代码,我确实得到了正确的结果)您的目标可能是不支持开箱即用 gzip 解压缩的旧版本的 .NET Framework。链接的帖子应该可以解决这个问题。

    【讨论】:

      猜你喜欢
      • 2013-03-08
      • 2012-10-05
      • 1970-01-01
      • 2015-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-22
      • 2016-08-15
      相关资源
      最近更新 更多