我正在试图找出究竟是什么IS unicode,utf-8等等。我不完全理解网页浏览器的作用以及为什么,HTTP服务器发送的内容
举个例子:
在法国,据说网站http://www.priceminister.com/以拉丁文-1编码
gsub
问题是:
由于€(欧元符号)不是用Latin-1编码的,我怎么可能在屏幕上看到它?(顺便说一下:太贵了)
下一个问题是:
如果我抓取这个网页,并将其从Latin-1解码为Unicode,那么我的欧元符号将会发生什么?这个标志不应该首先在Latin-1中编码?
答案 0 :(得分:0)
charset告诉你如何解释“字节”,低级别,甚至在弄清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的功能,因为它们是开源的。
另一种可能性是页面使用数字或命名实体:& euro;或€或€。这与charset无关。所以你甚至可以在ASCII文件中使用Euro,或Japanese或Emojis。
如果您正在抓取,您可以执行浏览器的操作并尝试检测字符集。如果你盲目信任charset声明,欧元就会丢失。
如果页面使用实体,那么您的html解析器可能会为您解释(取决于解析器及其配置方式)。如果没有,那么你必须自己进行解码。
在抓取时,即使字符集声明正确,也必须始终执行该操作(或使解析器执行此操作)。即使在utf-8文件中也没有任何东西阻止我使用实体。