本文介绍一种可靠方法,使用 `raw_unicode_escape` 编码配合 `unicode_escape` 解码,安全地将混合了 ascii 转义序列(如 `\n`、`\t`)和 unicode 字符(如 ?)的字符串(例如 `'\\n\\t??'`)完整还原为实际含义的字符串(即 `'\n\t??'`),避免 unicode 丢失或解码错误。
在 Python 中处理含转义序列的字符串时,若字符串中同时存在标准转义符(如 \\n、\\t)和原始 Unicode 字符(如 ?、?),直接使用 .encode().decode('unicode_escape') 会失败——因为 unicode_escape 解码器默认要求输入为 ASCII 兼容字节流,而原始 Unicode 字符(尤其是 UTF-8 多字节序列)会导致 UnicodeDecodeError 或被静默丢弃。
✅ 正确解法是分两步走,利用 raw_unicode_escape 编码器作为“中转桥梁”:
s = "\\n\\t??"
# Step 1: safely escape Unicode chars to \Uxxxxxx form, keep \\n, \\t as bytes
encoded = s.encode("raw_unicode_escape") # b'\\n\\t\\U0001f612\\U0001f612'
# Step 2: decode all escape sequences into real characters
result = encoded.decode("unicode_escape") # '\n\t??'
print(repr(result)) #
'\n\t??'
print(len(result)) # 4 (1 newline + 1 tab + 2 emoji)⚠️ 注意事项:
总结:raw_unicode_escape + unicode_escape 是处理“混合转义+Unicode”字符串的黄金组合,兼顾安全性、准确性与简洁性,无需手写正则替换或动态 eval,杜绝安全隐患与过度工程。