Python UTF-8 не может декодировать байт на 32-битной машине
он отлично работает на 64-битных машинах, но по какой-то причине не будет работать на python 2.4.3 на 32-битном экземпляре.
я получаю ошибку
'utf8' codec can't decode bytes in position 76-79: invalid data
для кода
try: str(sourceresult.sourcename).encode('utf8','replace') except: raise Exception( repr(sourceresult.sourcename ) )
он возвращает «kazamidori blog \ xf9»
Я изменил файл site.py, чтобы сделать UTF8 кодировкой по умолчанию, но, похоже, не работает.
- «Интерфейсы» в Python: да или нет?
- Кодировать ключи словарей внутри списка от unicode до ascii
- писать специальные символы в таблицу excel пакетом python pyExcelerator / xlwt
- Всегда ли лучше писать функцию для всего, что нужно повторить дважды?
- Как получить кодировку терминала из сценария python?
Нам нужно следующее, и нам нужен точный вывод:
type(sourceresult.sourcename) # I suspect it's already a UTF-8 encoded string repr(sourceresult.sourcename)
Как я уже сказал, я почти уверен, что ваше sourceresult.sourcename
уже является кодировкой UTF-8.
Возможно, это может немного помочь.
EDIT: кажется, ваш sourceresult.sourcename
закодирован как cp1252. Я не знаю, что такое mystring
(что вы ссылаетесь в комментарии). Итак, чтобы получить кодированную строку UTF-8, вам нужно сделать следующее:
source_as_UTF8= sourceresult.sourcename.decode("cp1252").encode("utf-8")
Однако строка, кодируемая cp1252, не согласуется с сообщением об ошибке, которое вы указали.
«Недопустимые данные» обычно означает, что входящие данные содержат символы вне его набора символов.
Это часто приводит к тому, что в некоторых случаях некоторые данные кодируются в наборе символов, отличном от UTF-8.
Например, если файл, который хранится в строке, не был преобразован в UTF-8, когда вы сделали UTF-8 стандартным набором символов. (В Windows вы обычно можете указать кодировку файла в диалоговом окне «Сохранить как …» вашего текстового редактора)
Или, когда данные поступают из базы данных, которая использует другой набор символов в таблицах, в соединении или в обоих.
Проверьте, откуда взялись данные, и какие кодировки задаются на этом пути.
Я думаю, что проблема заключается в использовании функции str (). Имейте в виду, что str () возвращает узкие, то есть строки с 1 байтом на символ. Если вход, sourceresult.sourcename, является unicode, то Python автоматически кодирует его, чтобы вернуть узкую строку. По умолчанию для этого используется системная кодировка, которая, вероятно, что-то вроде ISO-8859-1.
Таким образом, вы получаете ошибку, потому что не имеет смысла вызывать кодировку на уже закодированной строке. Если вы избавитесь от str (), он должен работать.
Убедитесь, что в поле varchar нет нечетного количества байтов; У меня был варчар (255), который взорвался, когда кто-то вошел в длинную строку на арабском языке. Затем я получил ошибку «неожиданного конца данных» (как и следовало ожидать …!)
- использовать python для создания совместимого пароля ldap (md5crypt) в окнах
- «AFFINE» не определен PIL python
- Строковый литерал байта с символами не-ascii
- Как предотвратить кодирование аргумента командной строки?
- Что лучше всего вернуть результат и распечатать его в конце функции?
- Могу ли я получить доступ к английскому словарю для прокрутки совпадений в морском коде? Если нет, я могу скопировать и вставить его из какого-либо места на несколько строк?
- Как работают «магические линии» в python при определении кодировки в файле python?
- Django – Как поделиться конфигурационными константами в приложении?
- Пропущенный арифметический период – очистите мой код
- Предотвращение ошибок кодирования в Python
- Частота счета ngrams