我有一个Python脚本,它使用urllib2.urlopen
加载网页,执行一些不同的魔术,并使用print
输出结果。然后在Windows上运行程序,如下所示:
python program.py > output.htm
问题是:
urlopen
从输出UTF8的iisweb服务器读取数据。它将同样的数据输出到输出,但是某些字符(例如Word总是违背您的意愿为您插入长连字符,因为它比您聪明)会被弄乱,最后变成–
。在
在进一步的调查中,我注意到即使web服务器输出UTF8数据,output.htm
文件是用ISO-8859-1字符集编码的。在
我的问题:
output.htm
作为命令行参数传入,然后写入该文件而不是屏幕,但我必须在程序中重做一大堆逻辑。在谢谢你的帮助!在
更新:
在output.htm
的顶部,我添加了:
然而,这没有什么区别。字符仍然是乱码。如果我在Firefox中手动切换到UTF-8,文件会正确显示。IE和FF都认为这个文件是西方的ISO,尽管它显然不是。在
从您的评论和问题更新来看,数据似乎正确编码为UTF-8。这意味着您只需要告诉您的浏览器它是UTF-8,或者使用BOM,或者通过向HTML文档中添加编码信息来更好:
如果文档不是有效的XML,就不应该使用XML声明。在
最好和最可靠的方法是通过HTTP为文件提供服务,并适当地设置
Content-Type:
头。在大多数Windows下的程序都会假定您使用的是默认的Windows编码,对于英语安装,它将是ISO-8859-1。这也适用于命令窗口输出。不幸的是,没有办法将默认编码设置为UTF-8—有一个为它定义的代码页,但是它没有得到很好的支持。在
有些编辑器会在文件的开头识别任何BOM字符并切换到UTF-8,但这不能保证。在
如果您要生成HTML,您应该包含正确的
charset
标记;然后浏览器将正确解释它。在用于输出到管道的默认编码。在我的机器上:
^{pr2}$现在所有输出都被编码为“utf-8”。在
我认为处理这种情况的正确方法
将来自internet源的所有数据从服务器或页面编码解码为
unicode
,然后使用上面显示的解决方法将默认编码设置为utf-8
。在相关问题 更多 >
编程相关推荐