Python3.9中如何从字符串变量打印Unicode字符?实操差异解惑
问题:两种Unicode字符串打印结果为何不同?
我刚接触编程,原本期望以下两种打印方式能输出相同的Unicode感叹号图形符号,但实际结果不一样,想知道原因。
实验代码
number = 10071 byteStr = number.to_bytes(4, byteorder='big') hexStr = hex(number) uniChar = byteStr.decode('utf-32be') uniStr = '\\u' + hexStr[2:6] print(f'{number} - {hexStr[2:6]} - {byteStr} - {uniChar}') print(f'{uniStr}') # Not working print(f'\u2757') # Working
输出结果
10071 - 2757 - b"\x00\x00'W" - ❗ \u2757 ❗
差异原因解释
print(f'{uniStr}')输出\u2757的原因:
你构建的uniStr是字符串字面量'\\u2757',实际存储的是\、u、2、7、5、7这六个独立字符。Python在打印时会直接输出这些字符,不会把它当作Unicode转义序列解析——因为转义序列的解析是在字符串字面量定义阶段完成的,运行时拼接出来的字符串不会触发二次解析。print(f'\u2757')输出❗的原因:
这里的\u2757是Python解析代码时就处理的Unicode转义序列,编译器会直接把它转换成对应的Unicode字符(U+2757,即感叹号符号),所以打印时输出的是符号本身。
如果想要让运行时拼接的字符串也被解析成Unicode字符,可以用以下方法:
import ast uniStr = '\\u2757' print(ast.literal_eval(f'"{uniStr}"')) # 输出❗
或者:
import codecs uniStr = 'u2757' print(codecs.decode(uniStr, 'unicode-escape')) # 输出❗
内容的提问来源于stack exchange,提问作者Tapper
相关产品推荐
相关产品推荐

