《Python Cookbook(第2版)中文版》——1.22 在标准输出中打印Unicode字符
本节书摘来自异步社区《Python Cookbook(第2版)中文版》一书中的第1章,第1.22节,作者[美]Alex Martelli , Anna Martelli Ravenscrof , David Ascher ,高铁军 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.22 在标准输出中打印Unicode字符任务
你想将Unicode字符串打印到标准输出中(比如为了调试),但是这些字符串并不符合默认的编码。
解决方案
通过Python标准库中的codecs模块,将sys.stdout流用转换器包装起来。比如,如果你知道输出会被打印到一个终端,而且该终端以ISO-8859-1的编码显式字符,可以这样编写代码:
import codecs, sys sys.stdout = codecs.lookup(iso8859-1)[-1](sys.stdout)
讨论
Unicode涵盖极广,全世界的语言字符都在Unicode的表示范围之内,另外,Unicode字符串的内部表示也与Unicode使用者没有关系。一个用于处理字节的文件流,比如sys.stdout,都有自己的编码。可以通过修改site模块改变其默认的编码,该文件流将对新文件使用新编码。不过,这样也需要完全改变你的Python安装,而且其他一些程序则可能会被搞乱,它们依然会按照你原先的编码设置工作(一般是典型的Python标准编码,ASCII)。因此,这种修改并不值得推荐。
本节的方法则用了一个技巧:将sys.stdout绑定到一个使用Unicode输入和ISO-8859-1(也就是Latin-1)输出的流。这种方法并不改变之前sys.stdout上的任何编码,如下面代码所示。首先,我们用一个变量指向原来的基于ASCII的sys.stdout:
old = sys.stdout
然后,我们可以创建一个Unicode字符串,这个字符串通常情况下是不能通过sys.stdout输出的:
char = u"\N{LATIN SMALL LETTER A WITH DIAERESIS}" print char Traceback (most recent call last): File " stdin ", line 1, in ? UnicodeError: ASCII encoding error: ordinal not in range(128)
如果这个操作没有出现错误,那是因为Python认为它知道你的“终端”用了什么编码(特别是,如果你的“终端”是IDLE—Python所附的免费的开发环境,Python极有可能能够确认正确的编码)。如果出现了错误,或者没有提示错误,但是输出的字符却不是你期望的,那是因为你的“终端”使用了UTF-8编码,而Python却不知道。如果属于后者的情况,可以用codecs流对sys.stdout进行包装以解决UTF-8编码问题,将sys.stdout绑定到被封装过的流,然后重新试一次:
sys.stdout = codecs.lookup(utf-8)[-1](sys.stdout) print char ä
这个方法只在你的“终端”、终端模拟器或者其他类型的交互式Python解释窗口支持UTF-8编码时才有效,而且具有极强的字符表现力,能够显示出任何需要的字符。如果没有这样的程序或设备,可以在因特网上找一个适用于你的平台的免费的程序。
Python会尝试确认你的“终端”的编码,并把编码的名字存在sys.stdout.encoding中作为一个属性。有时(但不是总是),它能够判断出正确的编码。IDLE已经对sys.stdout进行了包装,正如本节解决方案的方法一样,所以,在Python的交互式环境之下,可以直接打印出Unicode字符串。
python笔记6-%u60A0和\u60a0类似unicode解码 有时候从接口的返回值里面获取到的是类似 %u4E0A%u6D77%u60A0%u60A0 这种格式的编码,不是python里面的unicode编码。 python里面的unicode编码应该是这种格式:\u4e0a\u6d77\u60a0\u60a0 unicode编码-python2
异步社区 异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
相关文章
- Python+NumPy绘制常见曲线的方法详解_python
- [码尚教育]Python全栈自动化VIP课程对标大厂标准(挑战年薪40万)
- 地球引擎初级教程——Python API 语法(内涵JavaScript转python工具包介绍)
- Python怎么就火起来了?学会python可以做的兼职
- 【零基础学python】:清华官方出品的《看漫画学Python》全彩PDF,495页资源分享
- 掌握Python语言能做什么?python对小白友好吗?
- 【Python】自动化抢勾,python软件安装教程
- 35岁了转行python可以吗?什么样的人合适学习Python?
- Python标准库中的列表(list、数组)操作汇总(大约25种操作),附示例代码
- 76 python - 打飞机案例(显示敌机)
- Python语言的创始人解释为什么Python数组的索引从0开始
- gyp ERR! stack Error: Can‘t find Python executable “python“, you can set the PYTHON env variable.
- python 列表list相关操作
- python 处理缺失值
- Python 标准库之 random 模块
- (数据科学学习手札20)主成分分析原理推导&Python自编函数实现
- Python标准数据类型-Number(数字)
- 标准遗传算法(实数编码 python实现)模拟二进制交叉SBX 多项式变异
- Python学习---重点模块之xml
- Python标准库timet和datetime模块用法
- Python标准库random模块用法
- Python用python-docx读写word文档
- 【python百度智能云】:Python — 三种获取__VIEWSTATE、__VIEWSTATEGENERATOR、__EVENTVALIDATION方法。