Кто-либо знает, почему функции преобразования строк выдают исключения, когда ошибки = "игнорируют", передается? То, как я могу преобразовать из обычной строки Python, возражает против unicode без бросаемых ошибок?Большое спасибо!
python -c "import codecs; codecs.open('tmp', 'wb', encoding='utf8', errors='ignore').write('кошка')"
возвраты
Traceback (новый вызов в последний раз):
Файл"", строка 1, в
Файл "/usr/lib/python2.6/codecs.py", строка 686, в записи
возвратите self.writer.write (данные)
Файл "/usr/lib/python2.6/codecs.py", строка 351, в записи
данные, использованные = self.encode (объект, self.errors)
UnicodeDecodeError: кодек 'ASCII' не может декодировать байт 0xd0 в положении 0: порядковый не в диапазоне (128)
РЕДАКТИРОВАНИЕ - благодарит за ответы, но кто-либо знает, как преобразовать литерал выше, не используя "u" префикс? Так как причина, то, что Вы могли, конечно, иметь дело с чем-то, что не было константой :)
В Python 2.x используйте write ('кошка'.decode (' utf-8 ') вместо write ('кошка') .
Вы также можете использовать другую кодировку вместо 'utf-8'.
Надеюсь, это не вызовет никаких ошибок ...
проблема здесь === >>>> write ('кошка')
Вы пишете объект str, получатель ожидает объект unicode, поэтому он пытается преобразовать его в unicode, используя кодировку по умолчанию ( ascii), что, конечно, (?) вызывает хорошо известную (?) UnicodeDecodeError: кодек ascii не может декодировать байт 0xXX в позиции 0: порядковый номер не в диапазоне (128)
Вся суть используя модуль кодеков, подобный этому, чтобы заставить его преобразовывать ваши объекты unicode в кодировку utf8 "на лету" - так загрузите его unicode
Update Как преобразовать литерал или не буквальный:
unicode_object = literal_or_whatever.decode ("UNKNOWN_ENCODING")
Вы знаете, как кодируется ваш литерал? Не хотели бы вы рассказать нам, чего вы пытаетесь достичь? Один лайнер с python -c
не очень помогает; -)
Метод write
(в Python 2) принимает объект Unicode, и вы передаете ему str, поэтому вызов encode
в codecs.py
строка 351 сначала пытается создать объект Unicode (с кодеком по умолчанию, ascii). Исправить просто: измените вызов write
на
write(u'кошка')
Префикс u
сообщает Python, что вы используете объект Unicode, и все должно быть в порядке.
не решение (от автора вопроса) Я только что узнал: используйте python3
python3 -c "import codecs; codecs.open('tmp', 'wb', encoding='utf8', errors='ignore').write('кошка')"