首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Peter Piper编写了一个Python程序,结果丢失了所有的unicode字符

Peter Piper编写了一个Python程序,结果丢失了所有的unicode字符
EN

Stack Overflow用户
提问于 2012-01-07 00:48:16
回答 3查看 398关注 0票数 16

我有一个Python脚本,它使用urllib2.urlopen加载网页,执行一些不同的魔术,然后使用print输出结果。然后我们在Windows上运行该程序,如下所示:

代码语言:javascript
复制
python program.py > output.htm

问题来了:

urlopen从输出UTF8的IIS服务器读取数据。它会在输出中显示相同的数据,但是某些字符(比如Word总是违背您的意愿为您插入长连字符,因为它比您聪明)会乱码,并以–结尾。

在进一步的调查中,我注意到即使web服务器输出UTF8数据,output.htm文件也是使用ISO8859-1字符集编码的。

我的问题:

  1. 当您将Python程序重定向到Windows上的输出文件时,它是否始终使用此字符集?
  2. 如果是,是否有任何方法可以更改该行为?
  3. 如果不是,是否有解决方法?我想我可以只将output.htm作为命令行参数传入,并写入该文件而不是屏幕,但我必须在程序中重做一大堆逻辑。

谢谢你的帮助!

更新:

output.htm的顶部,我添加了:

代码语言:javascript
复制
<?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">

然而,这并没有什么区别。这些字符仍然是乱码。如果我在Firefox中手动切换到UTF-8,文件可以正确显示。IE和FF都认为这个文件是西方ISO,尽管它显然不是。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-07 01:15:32

从你的评论和问题更新来看,数据似乎是用UTF-8正确编码的。这意味着您只需要告诉浏览器它是UTF-8,或者通过使用BOM,或者更好的方式,通过向HTML文档添加编码信息:

代码语言:javascript
复制
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>

如果文档不是有效的XML,就不应该使用XML声明。

最好和最可靠的方法是通过超文本传输协议提供文件并适当地设置Content-Type:头。

票数 8
EN

Stack Overflow用户

发布于 2012-01-07 01:01:34

当你通过管道把Python程序放到Windows的输出文件中时,它总是使用这个字符集吗?

用于输出到管道的默认编码。在我的机器上:

代码语言:javascript
复制
In [5]: sys.getdefaultencoding()
Out[5]: 'ascii'

如果没有,是否有解决方法?

代码语言:javascript
复制
import sys
try:
    sys.setappdefaultencoding('utf-8')
except:
    sys = reload(sys)
    sys.setdefaultencoding('utf-8')

现在,所有输出都被编码为'utf-8‘。

我认为处理这种情况的正确方法是

重做了一大堆逻辑

就是将来自internet源的所有数据从服务器或页面编码解码为unicode,然后使用上面所示的变通方法将默认编码设置为utf-8

票数 5
EN

Stack Overflow用户

发布于 2012-01-07 01:10:53

Windows下的大多数程序都假定您使用的是默认的Windows编码,对于英文安装,编码为ISO-8859-1。这也适用于命令窗口输出。遗憾的是,没有办法将默认编码设置为UTF-8 -有为其定义的代码页,但它没有得到很好的支持。

有些编辑器会识别文件开头的任何BOM字符,并切换到UTF-8,但这不能保证。

如果要生成超文本标记语言,则应该包含适当的charset标记;这样浏览器就会正确地解释它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8761310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档