我使用匿名管道捕获所有stdout,然后stderr打印到richedit,当我使用wsprintf时它没关系,但使用多字节char的python真的让我烦恼。如何将所有这些输出转换为unicode? p>
更新2010-01-03:
感谢您的回复,但似乎str.encode()
仅适用于print xxx
内容,如果在py_runxxx()
期间出现错误,我的重定向stderr将捕获错误消息多字节字符串,所以有没有办法可以让python以unicode方式输出它的消息?在this post中似乎有一个可用的解决方案。
我稍后会尝试。
答案 0 :(得分:9)
首先,请记住,在Windows控制台上可能不完全支持Unicode。
下面的示例确实使用 UTF-8 将python输出到stderr
和stdout
。如果您愿意,可以将其更改为其他编码。
#!/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."
答案 1 :(得分:0)
您可以通过将字符串标记为Unicode(即:u'Hello World'
)或使用所有字符串都具有的encode()方法在python中使用Unicode。
例如。假设你有一个Unicode字符串,aStringVariable:
aStringVariable.encode('utf-8')
会将其转换为UTF-8。 'utf-16'将为您提供UTF-16,'ascii'将其转换为普通的旧ASCII字符串。
有关详细信息,请参阅:
答案 2 :(得分:-1)
wsprintf
?
这似乎是一个“C / C ++”问题而不是Python问题。
Python解释器总是将字节串写入stdout / stderr,而不是unicode(或“wide”)字符串。这意味着Python首先使用当前编码对所有unicode数据进行编码(可能是sys.getdefaultencoding()
)。
如果您想将stdout / stderr作为unicode数据获取,则必须使用正确的编码自行解码。
您最喜欢的C / C ++库肯定能够做到这一点。