Python遍历Unicode字符时,如何输出对应实际字符而非转义序列?
解决Python遍历并输出Unicode实际字符的问题
首先纠正你代码里的一个小错误:你定义的hex_list漏掉了字符5,这会导致跳过所有包含5的十六进制码点,比如\u0005、\u0015等,先把这个补上。
正确的实现方式
不需要用eval这种复杂且不安全的方法,直接通过码点数值转换更简单可靠:
方法一:直接遍历码点范围(推荐)
Unicode基本多语言平面的码点范围是0到0xFFFF(即65535),用range遍历这个范围,再用chr()函数把数值转换成对应字符:
for code_point in range(0x10000): print(chr(code_point))
方法二:基于你的十六进制列表修改
如果你坚持用原来的四层循环写法,只需把四位十六进制字符串转成整数,再用chr()转换:
hex_list = "0123456789abcdef" # 补上缺失的'5' for c1 in hex_list: for c2 in hex_list: for c3 in hex_list: for c4 in hex_list: hex_str = c1 + c2 + c3 + c4 # 将十六进制字符串转为十进制整数 code_point = int(hex_str, 16) # 转换为对应Unicode字符并输出 print(chr(code_point))
为什么你之前的写法失败
第一种
eval写法:my_char = r"\u0000"是原始字符串,里面的\u不会被解析成转义序列,eval("print(my_char)")只是输出这个字符串本身,自然和之前结果一致。第二种
eval写法:
你拼接出来的代码是print(\u0000),这不符合Python语法——\u只能出现在字符串字面量内部(比如"\u0000"),不能直接作为print的参数,所以会触发语法错误。
内容的提问来源于stack exchange,提问作者haifisch123
相关产品推荐
相关产品推荐

