ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

使用Python从ascii转换为utf-8

2019-08-27 13:43:08  阅读:317  来源: 互联网

标签:python command-prompt utf-8 ascii


我有用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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有