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

相关问题