如何使用Python将API返回的unicode格式字符串转换为实际UTF-8字符串?
Python 转换字面存储的Unicode转义字符串方案
你遇到的场景本质为:获取到的字符串是字面意义上的\uXXXX序列(即字符串中连续存储了\、u、四位十六进制数,并非Python解释器解析转义后的实际字符),直接用常规编码无法得到正确结果,可根据实际场景选择以下可靠处理方式:
分场景处理方法
通用场景:使用
unicode_escape规则解析
该方式适配绝大多数纯ASCII的转义字符串场景,通过编码+解码的两步操作即可完成转换:# 对应描述的原始字符串:索引1位置的字符为'u' raw_str = r"\u092f\u0939 \u0909\u0926\u093e\u0939\u0930\u0923 \u092a\u093e\u0920" converted_str = raw_str.encode('utf-8').decode('unicode_escape') # 最终输出为印地语原文:यह उदाहरण पाठ print(converted_str)注意:该方法会按规则解析所有转义序列,若原始字符串中存在非转义用途的反斜杠,需要提前做转义处理,避免误解析。
带引号包裹的字符串场景:使用
ast.literal_eval解析
如果拿到的原始字符串本身是被引号包裹的Python字符串字面量格式(例如"'\u092f\u0939'"),用该方法解析更安全,不存在任意代码执行风险:import ast raw_str = r"'\u092f\u0939 \u0909\u0926\u093e\u0939\u0930\u0923 \u092a\u093e\u0920'" converted_str = ast.literal_eval(raw_str)相比手动编写正则替换转义序列的方案,该方法可兼容所有Python规范的字符串转义格式,可靠性更高。
常见踩坑提醒
- 不要直接对原始字符串调用
encode('unicode_escape'),该操作会把所有字符反向转成\uXXXX形式,和转换目标完全相反 - 若字符串中混合了其他编码的转义字节,可在解码阶段指定对应编码,避免出现乱码
内容的提问来源于stack exchange,提问作者mangoland
相关产品推荐
相关产品推荐

