【问题标题】:Character encoding : Web browsers, Latin-1 and € sign字符编码:Web 浏览器、Latin-1 和 € 符号
【发布时间】:2017-06-18 19:00:24
【问题描述】:

我试图弄清楚究竟是什么是 unicode、utf-8 等。我不完全理解 网络浏览器的作用以及为什么,以及 HTTP 服务器发送的内容。

举个例子:

在法国,据说网站http://www.priceminister.com/ 是用Latin-1 编码的

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>

问题是:

由于 €(欧元符号)不是用 Latin-1 编码的,我怎么可能在我的屏幕上实际看到它?(顺便说一句:太贵了)

下一个问题是:

如果我抓取此网页,并将其从 Latin-1 解码为 Unicode,我的 €uro 符号会发生什么,它本来不应该以 Latin-1 编码?

【问题讨论】:

    标签: html browser unicode encoding utf-8


    【解决方案1】:

    字符集告诉您如何在弄清楚 HTML 语法(解析 HTML)之前解释低级别的“字节”

    Latin 1 (ISO 8859-1) 不包含欧元字符。

    但是大多数浏览器“知道”如果您声明您的字符集为 ISO 8859-1,但使用 80h-9Fh 范围内的字节,那么您可能是指 windows-1252 并改用它 (https://en.m.wikipedia.org/wiki/Windows-1252)

    事实上,所有主流浏览器都进行字符集检测,并且可以检测到的不仅仅是 windows-1252。您当然可以挖掘并查看 Firefox 和 Chrome 的功能,因为它们是开源的。

    另一种可能是页面使用了数字或命名实体:€或 €或 €。这与字符集无关。因此,您甚至可以在 ASCII 文件中包含欧元、日语或表情符号。

    如果您进行抓取,您可以执行浏览器所做的操作并尝试检测字符集。如果您盲目相信字符集声明,欧元将会丢失。

    如果页面使用实体,那么您的 html 解析器可能会为您解释(取决于解析器及其配置方式)。如果没有,则必须自己进行解码。

    在抓取时,即使字符集声明是正确的,您也必须始终进行非转义(或让解析器这样做)。即使在 utf-8 文件中,也没有什么能阻止我使用实体。

    【讨论】:

      猜你喜欢
      • 2019-12-09
      • 2012-01-07
      • 2011-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-11
      • 1970-01-01
      相关资源
      最近更新 更多