Кодировка символов Python при написании [duplicate]

[ОБНОВЛЕНО] Я собрал все, что я знаю о проверке адреса электронной почты здесь: http://isemail.info , который теперь не только проверяет, но и диагностирует проблемы с адресами электронной почты. Я согласен со многими комментариями здесь, что валидация является лишь частью ответа; см. мое эссе в http://isemail.info/about .

is_email () остается, насколько я знаю, единственным валидатором, который окончательно скажет вам, будет ли данный строка является действительным адресом электронной почты или нет. Я загрузил новую версию на http://isemail.info/

Я собрал тестовые примеры от Cal Henderson, Dave Child, Phil Haack, Doug Lovell, RFC5322 и RFC 3696. Всего 275 тестовых адресов. Я проверил все эти тесты со всеми бесплатными валидаторами, которые мог найти.

Я постараюсь сохранить эту страницу в актуальном состоянии, так как люди повышают эффективность своих валидаторов. Спасибо Cal, Michael, Dave, Paul и Phil за помощь и сотрудничество в компиляции этих тестов и конструктивной критике моего собственного валидатора .

Люди должны знать о ошибки в RFC 3696 в частности. Три из канонических примеров на самом деле являются неверными адресами. И максимальная длина адреса составляет 254 или 256 символов, а не 320.

20
задан Martijn Pieters 28 May 2014 в 18:07
поделиться

2 ответа

Python 3 декодирует текстовые файлы при чтении. Кодировка по умолчанию взята из locale.getpreferredencoding(False) , что, очевидно, для вашей установки возвращает 'ASCII'. См. Функцию documenation open() функции :

В текстовом режиме, если кодировка не указана, используемая кодировка зависит от платформы: locale.getpreferredencoding(False) вызывается, чтобы получить текущую кодировку локали.

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

currentFile = open(filename, 'rt', encoding='latin1')

где вы устанавливаете параметр encoding в соответствии с файлом, который вы читаете.

Python 3 поддерживает UTF-8 как значение по умолчанию для исходного кода .

То же самое относится к записи в текстовый файл для записи; записанные данные будут закодированы, и если вы будете полагаться на системную кодировку, вы можете получить исключения UnicodeEncodingError, если вы явно не установите подходящий кодек.

Вы можете прочитать на Python 3 и Unicode в Unicode HOWTO , который объясняет как кодирование исходного кода, так и чтение и запись данных Unicode.

50
ответ дан Martijn Pieters 28 August 2018 в 14:55
поделиться

«Насколько я знаю, Python3 должен поддерживать utf-8 всюду ...» Неверно. У меня есть python 3.6, и моя кодировка по умолчанию НЕ utf-8. Чтобы изменить его на utf-8 в моем коде, я использую:

import locale
def getpreferredencoding(do_setlocale = True):
   return "utf-8"
locale.getpreferredencoding = getpreferredencoding

, как описано в Изменение «предпочтительной кодировки языка» в Python 3 в Windows

0
ответ дан farid khafizov 28 August 2018 в 14:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: