Исключение UnicodeEncodeError при записи юникода в файл в Python
Опубликовано 04.06.2013
Если при попытке записи юникодной строки в файл:
with open('/tmp/fail','w') as f: f.write(u'привет!')
вываливается исключение:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-6: ordinal not in range(128)
можно не перечитывать судорожно Python Unicode HOWTO, а открывать файл с помощью функции codecs.open, обеспечивающей прозрачное перекодирование из внутреннего формата python в нужную кодировку:
import codecs with codecs.open('/tmp/success','w','utf-8') as f: f.write(u'привет!')
Кратко и по существу! Но здесь есть и обратная сторона – действия типа «\n» перестают восприниматься компилятором: они не включаются в текстовый файл, равно как и не выполняют своей функции…