Python 内置函数:ascii()

B站影视 韩国电影 2025-09-05 14:54 1

摘要:在 Python 中,字符串与对象的可打印表示通常通过 repr 获取。然而,当字符串中含有非 ASCII 字符时,repr 可能会原样输出这些字符。为了在仅支持 ASCII 的环境中安全显示,Python 提供了内置函数 ascii,它会将对象的非 ASCI

在 Python 中,字符串与对象的可打印表示通常通过 repr 获取。然而,当字符串中含有非 ASCII 字符时,repr 可能会原样输出这些字符。为了在仅支持 ASCII 的环境中安全显示,Python 提供了内置函数 ascii,它会将对象的非 ASCII 字符转义为对应的 \x、\u 或 \U 序列。

一、函数语法

ascii(object)

参数:

object:任意 Python 对象。

返回值:

返回对象的字符串表示形式(类似 repr),但所有非 ASCII 字符会转义。返回值类型始终为 str。

二、基础用法示例

1、普通字符串

print(ascii("Hello")) # 'Hello'

2、包含中文

print(ascii("你好")) # '\u4f60\u597d'

3、混合字符

print(ascii("Python")) # 'Python\U0001f40d'

4、列表与字典

data = ["A", "北京", {"key": "值"}]print(ascii(data))# ['A', '\u5317\u4eac', {'key': '\u503c'}]

三、进阶技巧

1、与 repr 的区别

s = "你好"print(repr(s)) # '你好'print(ascii(s)) # '\u4f60\u597d'

repr 保留原始字符(可能是非 ASCII)。

ascii 保证输出只包含 ASCII。

2、转义序列解码

像 \x、\u 或 \U 这样的转义序列,如果转换回原来的字符串,可以用字符串的 .encode.decode 方法配合 unicode_escape 编解码器。

方法一:直接解码 ascii 的返回值

s = ascii("汉");print(s) # '\u6c49'# 转换为真正的汉字decoded = s.encode('utf-8').decode('unicode_escape')print(decoded) # 汉

.encode('utf-8') 先把这个字符串编码成字节串。.decode('unicode_escape') 按 Unicode 转义规则把 \u6c49 翻译为真实字符。

方法二:解码原始转义序列字符串

s = r"\u6c49" # 原始字符串,内容是 \u6c49decoded = s.encode("utf-8").decode("unicode_escape")print(decoded) # 汉

四、ascii 的特点

1、保证可打印

结果只包含 ASCII 范围内的字符。

2、适用于任意对象

对容器(如列表、字典)也会递归转义其中的元素。

3、与 repr 相似但更安全

ascii ≈ repr + “非 ASCII 转义”。

五、补充说明

1、常见误区

print(ascii(123)) # '123' ✅ 数字不会转义

ascii 不仅能处理字符串,也能作用于任意对象(包括列表、字典等)。

2、转义序列的含义

当对象中包含非 ASCII 字符时,ascii 会自动将它们转义为标准的 Unicode 转义形式:

\xhh :表示一个字节(两位十六进制,范围 00–ff),常用于 Latin-1 范围内的字符。

\uXXXX :表示一个 16 位的 Unicode 码点(四位十六进制,范围 U+0000–U+FFFF)。

\UXXXXXXXX :表示一个 32 位的 Unicode 码点(八位十六进制,范围 U+00000000–U+10FFFF)。

示例:

print(ascii("ñ")) # '\xf1' (Latin-1 范围,用 \x 表示)print(ascii("汉")) # '\u6c49' (BMP 范围,用 \u 表示)print(ascii("")) # '\U0001f40d' (超出 BMP,用 \U 表示)

3、应用场景

(1)在日志和调试中生成 ASCII 安全的输出,避免控制台编码错误。

(2)在网络传输或跨平台文件保存时,确保数据只包含 ASCII 字符。

(3)在国际化环境中避免编码问题。

小结

ascii 是 Python 提供的一个实用函数,它与 repr 类似,但会确保输出中没有非 ASCII 字符,而是使用转义序列代替。这使得它在日志记录、跨平台输出、调试以及编码受限环境下尤其有用。通过配合 unicode_escape,还可以将转义序列还原为原始字符,实现编码与解码的灵活转换。

“点赞有美意,赞赏是鼓励”

来源:真来教育

相关推荐