这么一个字符串: \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 友赐教!
忘了说了是Python3,问题已经解决, 感谢2楼和3楼给出的2种解决方法:
1,用正则匹配出16进制字符然后:
>>> chr(0x60a8)
'您'
2,
>>> eval('"' + r'\u60a8' + '"')
'您'
1
xmh51 2017-04-17 09:33:22 +08:00
http://www.atool.org/chinese2unicode.php ASCII 转中文
|
2
AlphaTr 2017-04-17 09:35:39 +08:00 3
不懂 python ,说下其他语言的处理方式:正则匹配 `\u[a-f0-9]{4}` 然后取出对应的 16 进制字符串,转换为相应的字符编码,再求出对应字符,最后替换原字符~
|
3
ehs2013 2017-04-17 09:39:37 +08:00 1
危险但是有效的手段:
input = r'\u60a8' output = eval('"' + input + '"') print(output) |
4
libook 2017-04-17 09:42:52 +08:00 via Android
这个是 js 里的转义字符,在 js 的输出上和汉字是等价的。
不清楚 python 的编码方式, JS 的 unicode 编码方式和 unicode 官方编码还是有点区别的,需要用公式换算,建议看看 js 的 unicode 编码标准 |
5
est 2017-04-17 09:46:51 +08:00
print '\u60a8'.decode('raw_unicode_escape')
您 |
6
est 2017-04-17 09:47:12 +08:00 1
print '\u60a8'.decode('unicode_escape')
您 |
7
onlyice 2017-04-17 10:02:29 +08:00
r'\u60a8'.decode('unicode_escape')
est 正解,但是打少了 r 前缀 |
9
enenaaa 2017-04-17 11:26:09 +08:00 1
@onlyice python 3 应该是 b 前缀, b'\u60a8'.decode('unicode_escape')
这个才是比较好的解决办法 |
12
whwq2012 2017-04-17 12:28:19 +08:00 via Android
我也在 v2 问过这个问题
|
13
1OF7G OP |
14
flniu 2017-04-17 13:10:56 +08:00
楼上的朋友们看清楼主的问题了吗?
r'\u60a8' 和 '\u60a8' 完全不是一回事啊。 |
15
flniu 2017-04-17 13:17:30 +08:00
哦,楼上是 Python2 的示例,看错……
Python2 的 r'\u60a8' 等价于 Python3 的 rb'\u60a8' 和 r'\u60a8'.encode() |
16
1OF7G OP 画了个图,蓝色的方框是 Python3 表达式,大方框内表示等价的同一对象
这个问题最佳方法应该是: >>> r'\u60a8'.encode('utf-8').decode('unicode_escape') '您' 根据图片就很容易理解了 |
17
jason19659 2017-04-17 20:36:58 +08:00
java : System.out.println("\u60a8");
|
18
Kisesy 2017-04-17 21:14:25 +08:00
|
19
jason19659 2017-04-17 22:42:17 +08:00
@Kisesy #18 这个 json 库应该都有参数能解析
|