You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在控制台打印不含转义序列的ASCII字符列表?

筛选“友好”ASCII字符问题

需求

仅当ASCII字符ch的repr(ch)结果不以反斜杠开头时,才打印该字符,即输出所有这类“友好”的ASCII字符。

失败的实现代码

import re


characters = [chr(num) for num in range(256)]
# `characters` : 包含所有ASCII字符的列表

escaped_chars = [repr(ch)[1:-1] for ch in characters]
# `escaped_chars`: 存储所有ASCII字符的转义形式
#                  特殊字符会被转义,比如换行符存为"\n",回车符存为"\r"

printables = "".join(filter(lambda s: s[0] != "\\", escaped_chars))

print("\n".join(re.findall('.{1,20}', "".join(printables))))

问题现象

运行上述代码后,输出中混入了ç、õ等非ASCII字符,完整输出如下:

!"#$%&'()*+,-./0123
456789:;<=>?@ABCDEFG
HIJKLMNOPQRSTUVWXYZ[
]^_`abcdefghijklmnop
qrstuvwxyz{|}~¡¢£¤¥¦
§¨©ª«¬®¯°±²³´µ¶·¸¹º»
¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ
ÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâã
äåæçèéêëìíîïðñòóôõö÷
øùúûüýþÿ

问题根源

  1. 范围错误:标准ASCII字符的取值范围是0-127,但代码中用range(256)生成了0-255的字符,这包含了扩展ASCII(128-255)的字符。这些扩展字符不属于标准ASCII,且repr()不会对它们生成反斜杠开头的结果,因此被错误地纳入了输出。
  2. 转义处理冗余:repr(ch)[1:-1]的操作虽然能提取转义后的内容,但没必要绕这一步,直接针对原始字符判断repr()的结果更直观,也能避免后续过滤时的潜在问题。

修正后的代码

方案一:缩小字符范围+直接判断

import re

# 仅生成标准ASCII字符(0-127)
characters = [chr(num) for num in range(128)]

# 筛选repr结果不以反斜杠开头的字符
friendly_chars = [ch for ch in characters if not repr(ch).startswith('\\')]

# 按每行20个字符格式化输出
print("\n".join(re.findall('.{1,20}', "".join(friendly_chars))))

方案二:更高效的遍历方式

import re

friendly_chars = []
for num in range(128):
    ch = chr(num)
    if not repr(ch).startswith('\\'):
        friendly_chars.append(ch)

print("\n".join(re.findall('.{1,20}', "".join(friendly_chars))))

正确输出结果

运行修正后的代码,输出仅包含标准ASCII中的友好字符:

!"#$%&'()*+,-./0123
456789:;<=>?@ABCDEFG
HIJKLMNOPQRSTUVWXYZ[
]^_`abcdefghijklmnop
qrstuvwxyz{|}~

内容的提问来源于stack exchange,提问作者Toothpick Anemone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 10:45:26