Mik*_*sen 16 python utf-8 iso-8859-1 character-encoding piping
我有一个Python脚本,它使用加载网页urllib2.urlopen,做一些不同的魔法,然后使用它来吐出结果print.然后,我们在Windows上运行该程序,如下所示:
python program.py > output.htm
Run Code Online (Sandbox Code Playgroud)
这是问题所在:
在urlopen从其输出UTF8 IIS Web服务器读取数据.它会将相同的数据吐出到输出中,但是某些字符(例如Word总是会根据您的意愿为您插入的长连字符,因为它比您更聪明)会出现乱码并最终变形–.
经过进一步调查,我注意到即使Web服务器吐出UTF8数据,该output.htm文件也使用ISO-8859-1字符集进行编码.
我的问题:
output.htm作为命令行参数传入并写入该文件而不是屏幕,但我必须在我的程序中重做一大堆逻辑.谢谢你的帮助!
更新:
在output.htm我的顶部添加:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
Run Code Online (Sandbox Code Playgroud)
但是,它没有任何区别.角色仍然是乱码.如果我在Firefox中手动切换到UTF-8,则文件会正确显示.IE和FF都认为这个文件是Western ISO,尽管它显然不是.
从您的评论和问题更新,似乎数据在UTF-8中正确编码.这意味着您只需要通过使用BOM或者更好的方式通过向HTML文档添加编码信息来告诉您的浏览器它是UTF-8:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
Run Code Online (Sandbox Code Playgroud)
如果文档不是有效的XML,那么你真的不应该使用XML声明.
最好和最可靠的方法是通过HTTP提供文件并Content-Type:适当设置标头.
当您将Python程序传输到Windows上的输出文件时,它是否始终使用此字符集?
用于输出到管道的默认编码.在我的机器上:
In [5]: sys.getdefaultencoding()
Out[5]: 'ascii'
Run Code Online (Sandbox Code Playgroud)
如果没有,是否有解决方法?
import sys
try:
sys.setappdefaultencoding('utf-8')
except:
sys = reload(sys)
sys.setdefaultencoding('utf-8')
Run Code Online (Sandbox Code Playgroud)
现在所有输出都被编码为'utf-8'.
我认为没有正确处理这种情况的方法
重做一大堆逻辑
是将您的互联网源中的所有数据从服务器或页面编码解码为unicode,然后使用上面显示的解决方法将默认编码设置为utf-8.
| 归档时间: |
|
| 查看次数: |
382 次 |
| 最近记录: |