Python3中如何将Unicode字符串打印为真实中文字符而非转义形式
问题处理方案
场景1:代码中直接编写的字符串
如果你是在代码中直接编写如下内容:
a = '\u534e\u590f\u6210\u957f\u6df7\u5408' print(a)
Python3 本身会自动解析字符串字面量中的\uXXXXUnicode转义序列,直接就能输出华夏成长混合,无需额外处理。
如果这种写法下你仍然输出了带\u的转义串,大概率是两种原因:
- 给字符串加了raw字符串前缀
r,也就是写成了a = r'\u534e\u590f...',此时Python不会解析转义,字符串内容就是字面的\u开头的字符。解决方法就是去掉r前缀即可。 - 转义符写成了双反斜杠,也就是
a = '\\u534e\\u590f...',此时Python会把第一个反斜杠解析为转义符,输出的就是字面的\u开头内容。解决方法是把双反斜杠改成单个反斜杠即可。
场景2:从外部读取的字符串本身包含字面转义序列
如果你的字符串是从文件、接口、异常解析的JSON等外部数据源获取的,字符串内容本身就是由反斜杠+u+四位十六进制字符组成的字面内容(可以用repr(a)验证,如果输出为'\\u534e\\u590f...'就是这种情况),可以用以下两种方法处理:
方法1:使用unicode_escape解码
# 假设a是已经拿到的字面转义字符串 a = '\\u534e\\u590f\\u6210\\u957f\\u6df7\\u5408' # 先按utf-8编码为字节,再用unicode_escape规则解码 real_str = a.encode('utf-8').decode('unicode_escape') print(real_str) # 输出:华夏成长混合
注意:该方法会同时解析字符串中所有其他转义序列(如\n、\t),如果字符串中存在真实的反斜杠字符,可能会出现解析错误。
方法2:使用ast.literal_eval安全解析(推荐)
该方法只会解析Python字面量,不会执行任意代码,比直接使用eval安全得多:
import ast # 假设a是已经拿到的字面转义字符串 a = '\\u534e\\u590f\\u6210\\u957f\\u6df7\\u5408' # 先给字符串外层包上双引号,模拟Python字符串字面量后解析 real_str = ast.literal_eval(f'"{a}"') print(real_str) # 输出:华夏成长混合
注意:如果字符串本身包含双引号,需要先做转义处理,避免解析报错。
内容的提问来源于stack exchange,提问作者linrongbin
相关产品推荐
相关产品推荐

