2017-08-17 38 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

文本是文本,字節是字節。如果你只想用字節工作,那很好,但是不要轉過頭來假裝你正在處理文本。 –

相關問題