Должен ли я добавить encoding = 'utf-8' в мой обработчик регистрации Python?

Предположим, что я хотел бы обрабатывать строки Unicode при регистрации с помощью Python 2.7. Кажется «правильным» добавить параметр кодирования в FileHandler.

# coding=utf-8 import logging logger = logging.getLogger() logger.addHandler(logging.FileHandler('my_log.txt', encoding='utf-8')) logger.error(u'Pão') logger.error('São') 

У этого есть несколько проблем, хотя:

  1. Он вызывает UnicodeDecodeError в строчном литерале UTF-8 'São'.
  2. Выходной файл имеет окончание строк LF в Windows, когда CRLF представляется более подходящим.

Однако, если я вообще не кодирую какую-либо кодировку, у меня нет ни одной из этих проблем. Обе строки записываются в файл UTF-8, и я получаю концы строк CRLF. (Я думаю, что проблема с окончанием строки связана с открытием файла в двоичном режиме, когда указана кодировка.)

Поскольку опускание кодировки, похоже, работает лучше, есть ли какая-то причина, по которой я отсутствую, что когда-либо буду проходить в encoding='utf-8' ?

One Solution collect form web for “Должен ли я добавить encoding = 'utf-8' в мой обработчик регистрации Python?”

Если вы передаете кодировку в FileHandler , она использует codecs.open() с этой кодировкой, чтобы открыть файл; в противном случае он использует plain open() . Для этого используется encoding .

Помните, что Python 2.x не идеален при правильном обращении с байтами и в Юникоде: есть неявное кодирование и декодирование, которое происходит в разное время, что может вас загнать. Вы действительно не должны передавать строку, как «São», как байты в большинстве случаев: если это текст, вы должны работать с объектами Unicode.

Что касается окончаний строки – это обычно переводится на конечные концы строк для платформы Python для файлов. Но если используется codecs.open() , то основной файл открывается в двоичном режиме, поэтому не происходит codecs.open() \n на \r\n , как это обычно бывает в Windows.

  • Как найти китайский или японский символ в строке в Python?
  • Почему Python настаивает на использовании ascii?
  • Кодировка символов Python Европейские акценты
  • используя pyodbc на linux для вставки символов unicode или utf-8 в поле nvarchar mssql
  • Выход Unicode в stdout Python при запуске из cmd.exe
  • Как преобразовать строку из CP-1251 в UTF-8?
  • В чем разница между префиксом u и префиксом unicode () в python?
  • Двойной декодирование юникода в python
  • как читать файл, который может быть сохранен как ansi или unicode в python?
  • Читайте в .xlsx с модулем csv в python
  • Проблемы с кодировкой Python и BeautifulSoup
  • Python - лучший язык программирования в мире.