为什么 python 需要 unicode 类型,因为我可以直接用任何 unicode 字符声明一个变量?

why do python need unicode type since I can declare a variable directly with any unicode character?

我几天前仔细阅读了有关 unicode 痛苦的文章,并在几个小时前提出了这个问题:

在写入文件之前是否必须对 unicode 变量进行编码?

但是最近我想到了一个奇怪的问题。

我发现这些代码工作正常:

chinese = ['中文', '你好']  # py2, these are bytes, type is str
with open('filename', 'wb') as f:
    f.writelines(chinese)

因为我可以在 py2 和 py3 中直接用任何 unicode 字符声明一个变量,python(或者我们)得到 unicode 类型 涉及什么?我们不能在整个程序中只使用 str(py2) 和 bytes(py3) 类型吗?那么所谓的unicode pain就不存在了

任何人都可以给我一些见解吗?

Since I can declare a variable directly with any unicode characters [...]

但这不是你所做的。它们可能看起来 像字符,但它们在源文件中被编码为字节。如果您尝试对这些值做任何实际有用的事情,例如切片,下标,取长度,然后一切都崩溃了。 就是"Unicode pain"。

>>> '中文'[1]
'\xb8'