Не полагайтесь на кодировку системы по умолчанию.Вместо этого всегда устанавливайте его самостоятельно:
# read in a string (a bunch of bytes the encoding of which you should know)
str = sys.stdin.read();
# decode the bytes into a unicode string
u = unicode.decode(str, encoding='ISO-8859-1', errors=replace);
# do stuff with the string
# ...
# always operate on unicode stuff inside your program.
# make a 'unicode sandwhich'.
# ...
# encode the bytes in preparation for writing them out
out = unicode.encode(u, encoding='UTF-8')
# great, now you have bytes you can just write out
with open('myfile.txt', 'wb') as f:
rb.write(out)
Обратите внимание, я жестко закодировал кодировку повсюду.
Но что, если вы не знаете кодировку ввода?Ну, это проблема. Вы должны знать, что .Но я также понимаю, что юникод может быть болезненным, и есть один парень из сообщества питонов, который говорит вам , как остановить боль (видео) .
Обратите внимание, одно из БОЛЬШИХ изменений в Python 3Лучшая поддержка Unicode.Вместо использования пакета unicode
и сбивающего с толку типа py2 str
в python 3 str
тип представляет собой именно то, что было в типе Python 2 unicode
, и вы можете указывать кодировки в более удобных местах:
with open('myfile.txt', 'w', encoding=UTF-8, errors='ignore') as f:
# ...