我有这样的代码:
a = "\u0432"
b = u"\u0432"
c = b"\u0432"
d = c.decode('utf8')
print(type(a), a)
print(type(b), b)
print(type(c), c)
print(type(d), d)
然后输出:
<class 'str'> в
<class 'str'> в
<class 'bytes'> b'\\u0432'
<class 'str'> \u0432
为什么在后一种情况下我看到的是字符代码,而不是字符? 如何将 Byte 字符串转换为 Unicode 字符串,以便在输出时我看到的是字符而不是其代码?
最佳答案
在字符串(或 Python 2 中的 Unicode 对象)中,\u
有一个特殊的含义,即“这里有一个由它的 Unicode ID 指定的 Unicode 字符”。因此 u"\u0432"
将产生字符 в.
b''
前缀告诉你这是一个 8 位字节序列,并且 bytes 对象没有 Unicode 字符,所以 \u
代码没有特殊意义。因此,b"\u0432"
只是字节的序列 \
,u
,0
,4
、3
和 2
。
本质上,您有一个 8 位字符串,其中不包含 Unicode 字符,而是包含 Unicode 字符的规范。
您可以使用 unicode 转义编码器转换此规范。
>>> c.decode('unicode_escape')
'в'
关于python - 在unicode字符串中转换字节字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13837848/