我已经开始查阅 Python 标准库: (http://docs.python.org/3/library/functions.html),旨在进一步熟悉基本的 Python。 但是,在解释 ascii() 函数时,我并没有找到很清晰的说明。
请问有哪位能够提供简明扼要的解释,同时附上使用 ascii() 函数的有用示例呢? 该函数的使用场景是什么?
请问有哪位能够提供简明扼要的解释,同时附上使用 ascii() 函数的有用示例呢? 该函数的使用场景是什么?
ascii()
是一个函数,它将repr()
的输出进行编码,对于由repr()
产生的输出中不在ASCII范围内的任何代码点使用转义序列。
因此,像ë
这样的Latin 1代码点被表示为Python转义序列\xeb
。
这是Python 2中的标准表示方法;Python 3的repr()
将大多数Unicode代码点保留为其实际值输出,只要它是可打印字符:
>>> print(repr('ë'))
'ë'
>>> print(ascii('ë'))
'\xeb'
>>> 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
由两个不同的码点组成。
ascii()
可以帮助查看字符串中的确切内容。如果一个字符串包含空格或不可打印字符,或者终端因为字符编码不匹配而将字符串转换成 乱码,查看 ascii
表示可以提供一个可见且明确的表示方式,使得那些否则无法阅读的字符在所有终端上都能以相同的方式打印。
在 Stackoverflow 上经常会有关于字符串错误打印的问题,有时很难确定发生了什么,因为问题只显示了乱码,而没有提供一个明确的字符串表示方式。当提问者展示了 ascii
表示(或 Python 2 中的 repr
)时,情况就变得更加清晰了。
\x
与\u
和\U
一样,引用Unicode中的“代码点”。而且从技术上来说,据我所知,two
包含两个“代码点”,而不是字符(Unicode称之为单个用户可感知的字符)对吧? - Eric O. Lebigot