[英]How to detect and correct the Content-Type charset in email header in python?
[英]What is the default content-type/charset?
根据这个答案: urllib2读取到Unicode
我必须获取内容类型才能更改为unicode。 但是,有些网站没有“charset”。
例如, 此页面的['content-type']是“text / html”。 我无法将其转换为unicode。
encoding=urlResponse.headers['content-type'].split('charset=')[-1]
htmlSource = unicode(htmlSource, encoding)
TypeError: 'int' object is not callable
是否有默认的“编码”(当然是英文)......所以如果找不到任何内容,我可以使用它吗?
是否有默认的“编码”(当然是英文)......所以如果找不到任何内容,我可以使用它吗?
不,没有。 你必须猜。
琐碎的方法:尝试解码为UTF-8
。 如果它工作,很好,它可能是UTF-8。 如果没有,请为您正在浏览的页面选择最可能的编码。 对于英文页面是cp1252
,Windows西欧编码。 (这就像ISO-8859-1;实际上大多数浏览器都会使用cp1252
而不是iso-8859-1
即使你指定了charset,所以值得重复这种行为。)
如果您需要猜测其他语言,它会变得非常毛茸茸。 现有模块可以帮助您猜测这些情况。 见例如。 chardet 。
好吧,我只是浏览了重定向到的给定URL
http://www.engadget.com/2009/11/23/apple-hits-back-at-verizon-in-new-iphone-ads-video
然后在FireFox中点击Crtl-U(查看源代码)并显示
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
@Konrad:你是什么意思“似乎......使用ISO-8859-1”?
@alex:是什么让你觉得它没有“charset”?
查看您拥有的代码(我们GUESS是导致错误的行(请始终显示FULL traceback和错误消息!)):
htmlSource = unicode(htmlSource, encoding)
和错误消息:
TypeError: 'int' object is not callable
这意味着unicode
不引用内置函数,它指的是int
。 我记得在你的另一个问题中,你有类似的东西
if unicode == 1:
我建议你为该变量使用一些其他名称 - 比如use_unicode。
更多建议:(1)总是显示足够的代码来重现错误(2)总是读取错误信息。
理论上 ,默认字符集是ISO-8859-1 。 但通常,这不能依赖。 不发送明确字符集的网站值得受到谴责。 小心发送愤怒的电子邮件给Endgadget的网站管理员?
htmlSource=htmlSource.decode("utf8")
应该适用于大多数情况,除非您正在抓取非英语编码站点。
或者您可以像这样编写强制解码功能
def forcedecode(text):
for x in ["utf8","sjis","cp1252","utf16"]:
try:return text.decode(x)
except:pass
return "Unknown Encoding"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.