Python中如何将带反斜杠的字符串如 r'\u60a8' 解码为汉字?

这么一个字符串: \u60a8 ,包含 反斜杠 \、 u 、 6 、 0 、 a 、 8 ,共 6 个字符,如何将它转化为对应的汉字“您”?

>>> r'\u60a8'
'\\u60a8'

>>> print(r’\u60a8’) \u60a8

区别于一般情况: >>> print(’\u60a8’) 您

我想要的是: >>> print( magic(r’\u60a8’)) 您

搜了半天,讲得都是 byte 和 string 的转化,这个 string 到 string 的也不知道怎么描述了。其实不算编码问题,只是靠的比较近

望 v 友赐教!


Python中如何将带反斜杠的字符串如 r'\u60a8' 解码为汉字?

21 回复
# 核心问题:处理带转义字符的Unicode字符串
# 情况1:字符串字面量包含转义序列(如 r'\u60a8')
raw_str = r'\u60a8'  # 这实际上是6个字符:\ u 6 0 a 8
print(f"原始字符串: {raw_str}")  # 输出: \u60a8

# 方法1:使用encode+decode转换
result = raw_str.encode('utf-8').decode('unicode_escape')
print(f"解码结果: {result}")  # 输出: 您

# 方法2:直接处理字符串(更直观)
import codecs
result2 = codecs.decode(raw_str, 'unicode_escape')
print(f"解码结果: {result2}")  # 输出: 您

# 情况2:字符串实际包含Unicode字符(如 '\u60a8')
real_unicode = '\u60a8'  # 这直接就是汉字"您"
print(f"直接Unicode字符串: {real_unicode}")  # 输出: 您

# 情况3:处理混合字符串
mixed = r'Hello\u60a8World'
decoded_mixed = mixed.encode('utf-8').decode('unicode_escape')
print(f"混合解码: {decoded_mixed}")  # 输出: Hello您World

# 关键点说明:
# 1. r'\u60a8' 中的 \u 不会被Python解释为Unicode转义,因为r前缀表示原始字符串
# 2. decode('unicode_escape') 专门处理这种字符串中的转义序列
# 3. 如果字符串来自文件/网络,确保编码一致(通常UTF-8)

# 一句话总结:用 encode().decode('unicode_escape') 处理这种转义字符串。

不懂 python ,说下其他语言的处理方式:正则匹配 \u[a-f0-9]{4} 然后取出对应的 16 进制字符串,转换为相应的字符编码,再求出对应字符,最后替换原字符~

危险但是有效的手段:
input = r’\u60a8’
output = eval(’"’ + input + ‘"’)
print(output)

这个是 js 里的转义字符,在 js 的输出上和汉字是等价的。
不清楚 python 的编码方式, JS 的 unicode 编码方式和 unicode 官方编码还是有点区别的,需要用公式换算,建议看看 js 的 unicode 编码标准

print ‘\u60a8’.decode(‘raw_unicode_escape’)

print ‘\u60a8’.decode(‘unicode_escape’)

r’\u60a8’.decode(‘unicode_escape’)

est 正解,但是打少了 r 前缀

#2
#3
多谢,已经解决!

python 3 应该是 b 前缀, b’\u60a8’.decode(‘unicode_escape’)
这个才是比较好的解决办法

嗯,但是似乎楼主采用了 #2 #3 的不好的实践。。

r 和 b 前缀可以同时使用, rb’\u60a8’
虽说也没啥问题(

我也在 v2 问过这个问题

#5
#7
#9

你们说的 byte 转换到 str ,看了半天不明白,才发现原来 b’\u60a8’== b’\u60a8’这两个相等!
所以最佳方法应该是:
r’\u60a8’.encode(‘utf-8’).decode(‘unicode_escape’)
‘您’

楼上的朋友们看清楼主的问题了吗?
r’\u60a8’ 和 ‘\u60a8’ 完全不是一回事啊。

哦,楼上是 Python2 的示例,看错……
Python2 的 r’\u60a8’ 等价于 Python3 的 rb’\u60a8’ 和 r’\u60a8’.encode()

画了个图,蓝色的方框是 Python3 表达式,大方框内表示等价的同一对象
这个问题最佳方法应该是:
>>> r’\u60a8’.encode(‘utf-8’).decode(‘unicode_escape’)
'您’
根据图片就很容易理解了

java : System.out.println("\u60a8");

py 也一样啊
print("\u60a8")
# >> 您

不过跟楼主说的这个不一样,楼主这个需求类似把 json 里的 unicode 解析成正常文本

#18 这个 json 库应该都有参数能解析

b 开头,rb 开头,\u 啥意思?

回到顶部