2017-08-17 37 views
0

我仔细日前读到unicode的疼痛文章,这个问题小时前问:为什么python需要unicode类型,因为我可以直接用任何unicode字符声明一个变量?

Do I have to encode unicode variable before write to file?

但最近一个奇怪的问题,我脑子里浮现。

我发现,这些代码很好地工作:

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

因为我可以同在PY2和PY3任何Unicode字符,什么蟒蛇直接声明一个变量(或我们)得到的unicode类型参与?我们不能只在整个程序中使用str(py2)和bytes(py3)类型吗?那么所谓的unicode pain将不存在。

有人可以给我一些见解吗?

回答

1

因为我可以与任何Unicode字符直接声明一个变量[...]

但是,这不是你做了什么。他们可能会看起来像字符,但它们被编码为源文件中的字节。如果您尝试对这些值进行实际有用的操作,例如切片,下标,取长度,然后一切都打破。 是“Unicode疼痛”。

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

是的。这也是我所考虑的,关于字符串操作。但我只想看看是否有其他原因,我可能不知道:D。所以我可以说'如果你试图做任何有用的值,例如切片,下标,取长度,然后一切都打破。'是“unicode疼痛”的来源? – Tianqing

+1

文本是文本,字节是字节。如果你只想用字节工作,那很好,但是不要转过头来假装你正在处理文本。 –

相关问题