Должен ли я кодировать переменную unicode перед записью в файл?

Я прочитал статью "Unicdoe Pain" несколько дней назад. И я держу в уме «Unicode Sandwich». введите здесь описание изображения

Теперь мне нужно разобраться с китайским, и у меня есть список

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)

Юникод не имеет значения. :D


person Rick    schedule 17.08.2017    source источник
comment
Для чтения/записи файлов используйте функцию codecs.open. вместо этого с кодировкой - тип bytes (Python2 str) больше не нужно будет вручную управлять в вашем приложении, когда все будет правильными типами str (Python2 unicode).   -  person metatoaster    schedule 17.08.2017


Ответы (2)


Вам не обязательно этого делать, вы можете использовать io или codecs, чтобы открыть файл с кодировкой.

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

codecs.open имеет тот же синтаксис.

person Cory Madden    schedule 17.08.2017
comment
А еще лучше используйте io.open. Он совместим с open Python 3 и помогает в переносе позже. - person Mark Tolonen; 17.08.2017

В питоне3;

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

все будет хорошо.

person Rahul    schedule 17.08.2017
comment
Да. Я узнал, что могу сделать это и в python2. Тогда почему мы используем тип Unicode в нашей программе? Почему бы не объявить байтовый текст везде? - person Rick; 17.08.2017