2017-08-17 64 views
1

我幾天前閱讀了「Unicdoe Pain」文章。我記住了「Unicode三明治」。 enter image description here在寫入文件之前,我是否必須對unicode變量進行編碼?

現在我要處理一些中國人,我已經有了一個名單

chinese = [u'中文', u'你好'] 

我是否需要寫文件之前繼續編碼?

add_line_break = [word + u'\n' for word in chinese] 
encoded_chinese = [word.encode('utf-8') for word in add_line_break] 
with open('filename', 'wb') as f: 
    f.writelines(encoded_chinese) 

不知何故我發現,在python2。我可以這樣做:

chinese = ['中文', '你好'] 
with open('filename', 'wb') as f: 
    f.writelines(chinese) 

沒有unicode事項involed。 :D

+0

對於讀取/寫入文件,請使用[codecs.open](https://docs.python.org/3/library/codecs.html#codecs.open)函數代替編碼 - 「bytes」(當所有東西都是正確的'str'(Python2'unicode')類型時,Python2'str')類型將不再需要在應用程序中手動管理。 – metatoaster

回答

1

您不必這樣做,您可以使用iocodecs以編碼方式打開文件。

import io 
with io.open('file.txt', 'w', encoding='utf-8') as f: 
    f.write(u'你好') 

codecs.open具有相同的語法。

+0

更好的是,使用'io.open'。它與Python 3的'open'和aids稍後移植兼容。 –

0

在python3;

with open('file.txt, 'w', encoding='utf-8') as f: 
    f.write('你好') 

會做得很好。

+0

是的。我發現我也可以在python2中做到這一點。那麼爲什麼我們的程序中涉及unicode類型?爲什麼不在任何地方聲明字節文本? – Tianqing

相關問題