Python - 标准库 - ascii()函数

时间:2014-02-11 12:33:47

标签: python python-3.x ascii standard-library

我已经开始浏览Python标准库:(http://docs.python.org/3/library/functions.html

试图进一步熟悉基本的python。当谈到ascii()函数的解释时,我发现它并不清楚。

有人能够提供简明的解释,提供有用情况的例子,其中可以使用ascii()函数吗?

2 个答案:

答案 0 :(得分:5)

ascii()是一个函数,它对repr()的输出进行编码,以便对repr()生成的输出中不在ASCII范围内的任何代码点使用转义序列。

因此,像ë这样的拉丁语1代码点由Python转义序列\xeb代替。

这是Python 2中的标准表示; Python 3 repr()将大多数Unicode代码点作为输出中的实际值,只要它是可打印的字符:

>>> print(repr('ë'))
'ë'
>>> print(ascii('ë'))
'\xeb'

两个输出都是有效的Python字符串文字,但后者使用 ASCII字符,而前者需要与Unicode兼容的编码。

对于U + 0100和U + FFFF \uxxxx之间的unicode代码点,使用转义码序列,对于使用\Uxxxxxxxx形式的任何内容。有关Python字符串文字,请参阅available escape code syntax

repr()类似,ascii()是一个非常有用的调试工具,尤其是涉及字符串的确切内容时。与repr()不同,ascii()输出使许多Unicode陷阱更加明显。

以非规范化的代码点为例; ë字符可以用两种方式表示,如U ​​+ 00EB代码点,为ASCII e加上组合分音¨(代码点U + 0308) ):

>>> import unicodedata
>>> one, two = 'ë', unicodedata.normalize('NFD', 'ë')
>>> print(one, two)
ë ë
>>> print(repr(one), repr(two))
'ë' 'ë'
>>> print(ascii(one), ascii(two))
'\xeb' 'e\u0308'

只有ascii()明确表示two包含两个不同的代码点。

答案 1 :(得分:1)

ascii()可用于查找字符串中的确切内容。如果字符串包含空格或不可打印的字符,或者由于字符编码不匹配而导致终端将字符串转换为mojibake,则查看字符串的ascii表示非常有用,因为它提供了对于那些在每个人的终端上以相同方式打印的其他不可读字符的可见且明确的表示。

关于错误打印的字符串,Stackoverflow上经常出现问题,有时很难分辨出发生了什么,因为问题只显示了mojibake而不是字符串的明确表示。当提问者显示ascii表示(或Python 2中的repr)时,情况会变得更加清晰。