我有这样一个代码:

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

为什么在后一种情况下,我看到的是字符代码,而不是字符?

推荐答案

在字符串(或Python 2中的Unicode对象)中,\u有一个特殊的含义,即"这里有一个由其Unicode ID指定的Unicode字符".因此u"\u0432"将产生字符of.

b''前缀告诉您这是一个8位字节的序列,字节对象没有Unicode字符,因此\u代码没有特殊意义.因此,b"\u0432"只是字节\u0432的序列.

基本上,您有一个8位字符串,它不包含Unicode字符,而是包含Unicode字符的规范.

可以使用unicode转义编码器转换此规范.

>>> c.decode('unicode_escape')
'в'

Python-3.x相关问答推荐

是否可以使用参数对Flask重定向?

DuckDB:带有嵌套对象的星形表达式

如何获得大Pandas 的常见时间间隔

如何立即从asyncio.Task获取异常?

生成具有偶数个 0 和 1 的给定长度的所有二进制数

ImportError:抓取数据后找不到 html5lib

平移数组

Django - ValueError:无法将字符串转换为浮点数:''

过滤并获取数据框中条件之间的行

spinbutton调整up/down箭头

如何使我的课程在 Python 中非常可打印?

pythondecorator中的变量范围

如何通过python打开文件

导入 python 模块而不实际执行它

BeautifulSoup 的 Python 3 兼容性

如何模拟 open(...).write() 而不会出现没有这样的文件或目录错误?

Pruning in Keras

如何从 Python 3 导入 FileNotFoundError?

哪个更有效:Python 文档字符串还是类型提示?

python asyncio add_done_callback 与 async def