You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中Unicode转义后右单引号解码异常问题求助

解决Python中Unicode转义解析与右单引号乱码问题

问题原因

你遇到的乱码是错误编码解码流程导致的:

  • sample_text本身是Unicode字符串,其中“it’s”里的’是U+2019(右单引号),它的UTF-8编码为0xE2 0x80 0x99。
  • 执行sample_text.encode()时,默认使用系统UTF-8编码,将’转换为上述三个字节。
  • 再调用decode('unicode-escape')时,会把这三个字节当作Unicode转义序列的一部分解析,最终生成乱码â\x80\x99。

而print(sample_text)显示正常,是因为Python直接输出Unicode字符串时,终端会用UTF-8正确渲染’,但\u201C和\u201D是字符串里的转义序列(实际存储的是\、u、2等字符),所以直接输出了转义形式。

正确解决方案

方案1:使用ast.literal_eval解析转义序列

该方法能安全解析字符串中的Unicode转义序列,同时保留原有的Unicode字符:

import ast

sample_text = "The fox's color was \u201Cbrown\u201D and it’s speed was quick"
# 用repr保留转义序列,再用ast.literal_eval解析
decoded_text = ast.literal_eval(repr(sample_text))
print(decoded_text)
# 输出:The fox's color was “brown” and it’s speed was quick

方案2:正则替换解析Unicode转义

手动匹配并替换\uXXXX格式的转义序列,不影响其他Unicode字符:

import re

def parse_unicode_escapes(s):
    def replace(match):
        # 将十六进制字符串转为对应的Unicode字符
        return chr(int(match.group(1), 16))
    # 匹配所有\u开头的4位十六进制转义序列
    return re.sub(r'\\u([0-9a-fA-F]{4})', replace, s)

sample_text = "The fox's color was \u201Cbrown\u201D and it’s speed was quick"
decoded_text = parse_unicode_escapes(sample_text)
print(decoded_text)
# 输出:The fox's color was “brown” and it’s speed was quick

内容的提问来源于stack exchange,提问作者impy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 19:07:31