Python中如何遍历并打印指定的Unicode编码范围?

\u0000-\u0040
主要是用于正则,我想看看这个范围内是不是都是标点符号
Python中如何遍历并打印指定的Unicode编码范围?

16 回复

print(’’.join(chr(u) for u in range(0, 0x41)))
实际上\u0020-\u0040 才是,前面的基本是控制用 ascii


# 遍历并打印Unicode编码范围的几种方法

# 方法1:直接使用range和chr函数
def print_unicode_range(start, end):
    """打印指定范围的Unicode字符"""
    for code_point in range(start, end + 1):
        try:
            char = chr(code_point)
            print(f"U+{code_point:04X} ({code_point}) -> {char}")
        except ValueError:
            print(f"U+{code_point:04X} -> 无效的Unicode码点")

# 示例:打印基本拉丁字母(A-Z)
print("=== 基本拉丁字母(A-Z)===")
print_unicode_range(0x0041, 0x005A)  # A-Z

# 示例:打印中文常用汉字范围(部分)
print("\n=== 常用汉字(部分)===")
print_unicode_range(0x4E00, 0x4E0F)  # 几个中文字符

# 方法2:使用列表推导式生成字符列表
def get_unicode_chars(start, end):
    """获取指定范围内的有效Unicode字符列表"""
    return [chr(i) for i in range(start, end + 1) 
            if 0 <= i <= 0x10FFFF]

# 方法3:格式化输出更详细的信息
def print_unicode_range_detailed(start, end, chars_per_line=10):
    """更详细的Unicode范围打印,每行固定字符数"""
    print(f"范围: U+{start:04X} - U+{end:04X} ({end-start+1}个码点)")
    
    chars = []
    for code in range(start, end + 1):
        try:
            chars.append(chr(code))
        except:
            chars.append('�')  # 替换无效字符
    
    # 按指定数量分行打印
    for i in range(0, len(chars), chars_per_line):
        line_chars = chars[i:i + chars_per_line]
        line_codes = range(start + i, start + i + len(line_chars))
        
        # 打印码点
        codes_str = ' '.join(f'U+{c:04X}' for c in line_codes)
        print(f"码点: {codes_str}")
        
        # 打印字符
        chars_str = '   '.join(line_chars)
        print(f"字符: {chars_str}\n")

# 使用示例
if __name__ == "__main__":
    # 打印希腊字母表
    print("=== 希腊字母(大写)===")
    print_unicode_range_detailed(0x0391, 0x03A1, 5)
    
    # 打印数字形式
    print("=== 带圈数字 ===")
    print_unicode_range_detailed(0x2460, 0x2469, 5)

核心要点:

  1. 使用chr()函数将Unicode码点转换为字符
  2. range()函数定义遍历范围
  3. 十六进制表示更符合Unicode规范(如0x4E00
  4. 使用try-except处理无效码点

主要方法:

  • print_unicode_range(): 基础遍历打印
  • print_unicode_range_detailed(): 格式化分列输出
  • 支持自定义每行显示字符数

使用示例:

# 打印表情符号范围(部分)
print_unicode_range_detailed(0x1F600, 0x1F60F, 8)

注意: 完整Unicode范围是0x0000-0x10FFFF,但部分区域是保留或无效的。

一句话建议:根据输出需求选择基础打印或格式化分列显示。

Unicode 每个字符的详情,可以查官方文档: https://www.unicode.org/charts/

代码如下:

def show_unicode_text(start_num, length):
“”"
打印 Unicode 字符串
:param start_num: unicode 起始索引值(10 进制)
:param length: 起始值之后,要打印的字符个数
:return:
“”"
for index in xrange(start_num, start_num + length - 1):
hex_str = str(hex(index))[2:]
tmp_text = “\U{:0>8}”.format(hex_str)
# tmp_text = “\u{:0>4}”.format(hex_str) # 仅支持 BMP 平面的字符
dest_unicode = codecs.decode(tmp_text, “unicode_escape”)
print index, tmp_text, dest_unicode

//\u0000-\u0040
show_unicode_text(0, 41)

# show 数字和大写字母
show_unicode_text(48, 44)

# show 部分表情
show_unicode_text(128518, 10)

0x41 这个是什么??

0x41 这个是什么??

\u0040 这里 0040 就是 16 进制的,range 是左闭右开的,所以\u0020-\u0040 的码点范围是 range(0x00, 0x40+1)

如果是\u2190-\u21FF,那么如何遍历?

x 这个是不是只能在第二位?还是有规律?

#1 就结帖了
In [1]: chr(0x8888)
Out[1]: '袈’
In [2]: chr(0x2190)
Out[2]: ‘←’

0b 二进制 0o 八进制 0x 16 进制
0b10 // 2
0o10 // 8
0x10 // 16
unicode 字符表示方法 \u + 16 进制数值,例如 \u0001
print(u’\u0061’) // a

谢谢
0b10
0o10
0x10 这种应该叫什么

你连最基础的整数进制都分不清,后面写程序很难的,先去看基础的书籍吧

0b10 是一个 2 进制数值
前面的 0b 是一个固定的前缀,代表 2 进制数字. Python 识别到 0b 后, 会将其后的内容当作 2 进制来解析.例如
0b11 // 3
0b2 // SyntaxError 2 进制没有 2 这个字符,因此报错

其他的也一样
0o 是 8 进制数值的前缀
0x 是 16 进制数值的前缀

谢谢终于知道这个叫做进制数值

第一次使用 V2EX 我已经有答案,请问如何结束话题?

python2 代码:

for i in range(0x005b,0x005f):
print (unichr(i))
python3 代码请查看 http://www.chenxm.cc/post/683.html

python -c ‘import os;os.system(“ruby -e “puts [*\”\u0000\”…\"\u0040\"]"")’

回到顶部