编程语言
首页 > 编程语言> > 使用Python从ascii转换为utf-8

使用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