Python与Unicode标准错误输出

2 投票
3 回答
3061 浏览
提问于 2025-04-15 17:34

我用一个匿名管道来捕捉所有的标准输出和错误输出,然后把它们打印到一个富文本编辑器里。用wsprintf的时候没问题,但Python使用的是多字节字符,这让我很烦。有没有办法把这些输出转换成Unicode格式呢?

更新 2010-01-03:

谢谢你的回复,但似乎str.encode()只对print xxx的内容有效。如果在py_runxxx()过程中出现错误,我重定向的错误输出会捕捉到多字节字符串的错误信息。那么有没有办法让Python以Unicode的方式输出信息呢?在这篇帖子中似乎有一个可行的解决方案。

我稍后会试试。

3 个回答

-1

wsprintf是什么?

这个问题看起来更像是关于“C/C++”的,而不是Python。

Python解释器总是将字节字符串写入标准输出(stdout)和标准错误(stderr),而不是直接写入Unicode(或称为“宽”)字符串。这意味着Python会先用当前的编码方式(通常是sys.getdefaultencoding())把所有的Unicode数据转换成字节。

如果你想把标准输出或标准错误当作Unicode数据来处理,你需要自己用正确的编码方式进行解码。

你喜欢的C/C++库肯定有办法做到这一点。

0

在Python中,你可以通过将字符串标记为Unicode(比如:u'Hello World')或者使用所有字符串都有的encode()方法来处理Unicode。

举个例子:假设你有一个Unicode字符串,叫做aStringVariable:

aStringVariable.encode('utf-8')

这个方法会把它转换成UTF-8格式。如果你用'utf-16',就会得到UTF-16格式,而'ascii'则会把它转换成普通的ASCII字符串。

想了解更多信息,可以查看:

9

首先,请记住,在Windows的命令行中,可能不完全支持Unicode字符。

下面的例子展示了如何让Python使用UTF-8格式输出到stderrstdout。如果你想的话,可以把它改成其他编码格式。

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import codecs, sys

reload(sys)
sys.setdefaultencoding('utf-8')

print sys.getdefaultencoding()

sys.stdout = codecs.getwriter('utf8')(sys.stdout)
sys.stderr = codecs.getwriter('utf8')(sys.stderr)

print "This is an Е乂αmp١ȅ testing Unicode support using Arabic, Latin, Cyrillic, Greek, Hebrew and CJK code points."

撰写回答