使用Python从ascii转换为utf-8
作者:互联网
我有用python编写的xmpp bot.其中一个插件能够执行OS命令并将输出发送给用户.据我所知,输出应该像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:对不起我的英文:(
解决方法:
你说“”sys.getdefaultencoding()表示默认的命令提示符编码是’ascii’“”“
sys.getdefaultencoding对于“命令提示符”编码说没什么.
在Windows上,sys.stdout.encoding应该完成这项工作.在我的机器上,它在命令提示符窗口中运行Python时包含cp850,在IDLE中运行cp1252.你的应该分别包含cp866和cp1251.
更新您说在IDLE中仍然需要cp866.请注意:
IDLE 2.6.4
>>> import os
>>> os.popen('chcp').read()
'Active code page: 850\n'
>>>
因此,当您的应用程序启动时,请检查您是否在Windows上,如果是,请解析os.popen(‘chcp’).read()的结果. :之前的文本可能与语言环境有关. codepage = result.split()[ – 1]可能足够好“解析”.在Unix上,没有Windows / MS-DOS分裂个性,sys.stdout.encoding应该没问题.
标签:python,command-prompt,utf-8,ascii 来源: https://codeday.me/bug/20190827/1741594.html