请教一个编码问题,将 r'\u60a8' 本身带反斜杠的 string"解码"为汉字?

2017 年 4 月 17 日
 1OF7G

这么一个字符串: \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 友赐教!

6920 次点击
所在节点    Python
20 条回复
xmh51
2017 年 4 月 17 日
AlphaTr
2017 年 4 月 17 日
不懂 python ,说下其他语言的处理方式:正则匹配 `\u[a-f0-9]{4}` 然后取出对应的 16 进制字符串,转换为相应的字符编码,再求出对应字符,最后替换原字符~
ehs2013
2017 年 4 月 17 日
危险但是有效的手段:
input = r'\u60a8'
output = eval('"' + input + '"')
print(output)
libook
2017 年 4 月 17 日
这个是 js 里的转义字符,在 js 的输出上和汉字是等价的。
不清楚 python 的编码方式, JS 的 unicode 编码方式和 unicode 官方编码还是有点区别的,需要用公式换算,建议看看 js 的 unicode 编码标准
est
2017 年 4 月 17 日
print '\u60a8'.decode('raw_unicode_escape')
est
2017 年 4 月 17 日
print '\u60a8'.decode('unicode_escape')
onlyice
2017 年 4 月 17 日
r'\u60a8'.decode('unicode_escape')

est 正解,但是打少了 r 前缀
1OF7G
2017 年 4 月 17 日
@AlphaTr #2
@ehs2013 #3
多谢,已经解决!
enenaaa
2017 年 4 月 17 日
@onlyice python 3 应该是 b 前缀, b'\u60a8'.decode('unicode_escape')
这个才是比较好的解决办法
onlyice
2017 年 4 月 17 日
@enenaaa 嗯,但是似乎楼主采用了 #2 #3 的不好的实践。。
dant
2017 年 4 月 17 日
@enenaaa r 和 b 前缀可以同时使用, rb'\u60a8'
虽说也没啥问题(
syahd
2017 年 4 月 17 日
我也在 v2 问过这个问题
1OF7G
2017 年 4 月 17 日
@est #5
@onlyice #7
@enenaaa #9

你们说的 byte 转换到 str ,看了半天不明白,才发现原来 b'\\u60a8'== b'\u60a8'这两个相等!
所以最佳方法应该是:
r'\u60a8'.encode('utf-8').decode('unicode_escape')
'您'
flniu
2017 年 4 月 17 日
楼上的朋友们看清楼主的问题了吗?
r'\u60a8' 和 '\u60a8' 完全不是一回事啊。
flniu
2017 年 4 月 17 日
哦,楼上是 Python2 的示例,看错……
Python2 的 r'\u60a8' 等价于 Python3 的 rb'\u60a8' 和 r'\u60a8'.encode()
1OF7G
2017 年 4 月 17 日
画了个图,蓝色的方框是 Python3 表达式,大方框内表示等价的同一对象
这个问题最佳方法应该是:
>>> r'\u60a8'.encode('utf-8').decode('unicode_escape')
'您'
根据图片就很容易理解了
jason19659
2017 年 4 月 17 日
java : System.out.println("\u60a8");
Kisesy
2017 年 4 月 17 日
@jason19659 py 也一样啊
print("\u60a8")
# >> 您

不过跟楼主说的这个不一样,楼主这个需求类似把 json 里的 unicode 解析成正常文本
jason19659
2017 年 4 月 17 日
@Kisesy #18 这个 json 库应该都有参数能解析
Hyvi
2018 年 9 月 13 日
@1OF7G b 开头,rb 开头,\u 啥意思?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/355312

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX