【发布时间】:2011-01-16 19:11:31
【问题描述】:
我有用 python 编写的 xmpp bot。它的插件之一能够执行操作系统命令并将输出发送给用户。据我所知,输出应该是类似 unicode 的,以便通过 xmpp 协议发送。所以我试着这样处理:
output = os.popen(cmd).read()
if not isinstance(output, unicode):
output = unicode(output,'utf-8','ignore')
bot.send(xmpp.Message(mess.getFrom(),output))
但是当俄罗斯符号出现在输出中时,它们并没有很好地转换。
sys.getdefaultencoding()
说默认的命令提示符编码是'ascii',但是当我尝试这样做时
output.decode('ascii')
在 python 控制台中我得到
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0x92 in position 1:
ordinal not in range(128)
操作系统:Win XP、Python 2.5.4 PS:对不起我的英语:(
【问题讨论】:
-
你试过输出
output = output.encode("utf-8')吗? -
更改为 output.decode('866') 帮助了我。但是 locale.getpreferredencoding(do_setlocale=True) 返回 cp1251。还有其他方法可以确定正确的编码吗?因为这个机器人也应该在 linux 下工作
-
Erm...ASCII 已经是 UTF-8 的完美子集了!根据定义,任何 ASCII 文本都是 UTF-8 文本。在这里是打算反过来还是 colriot 要求将其他编码转换为 UTF-8?
标签: python utf-8 ascii command-prompt