Как исправить эту ошибку unicode / cPickle в Python?

ids = cPickle.loads(gem.value) loads() argument 1 must be string, not unicode 

  • IDLE и символы Unicode (2.5.4)
  • Двойной декодирование юникода в python
  • Показывать не ascii (японский) персонажей в легенде сюжета панд
  • UnicodeDecodeError при перенаправлении в файл
  • SQLAlchemy и UnicodeDecodeError
  • Литералы Unicode, вызывающие недействительный синтаксис
  • Кодировка HTML и анализ lxml
  • Почему языки сценариев не выводят Unicode на консоль Windows?
  • 3 Solutions collect form web for “Как исправить эту ошибку unicode / cPickle в Python?”

    cPickle.loads хочет, чтобы строка байтов (это именно то, что выдает cPickle.dumps ), и вместо этого вы кормите строку unicode. Вам нужно будет «закодировать» эту строку Unicode, чтобы вернуть строку байта, которую первоначально дали вам dumps , но трудно догадаться, какую кодировку вы случайно наложили на нее – возможно, latin-1 или utf-8 (если ascii don Не волнуйтесь, любой из этих двух расшифрует его просто отлично), может быть, utf-16 …? Трудно догадаться, не зная, что такое gem и как вы изначально установили его value из вывода cPickle.dumps …!

    Результат cPickle.dumps() – это объект str , а не объект unicode . Вам нужно найти шаг в коде, где вы декодируете маринованный объект str , и опустить этот шаг.

    НЕ пытайтесь преобразовать объект unicode объект str . Две ошибки не дают права. Пример (Python 2.6):

     >>> import cPickle >>> ps = cPickle.dumps([1,2,3], -1) >>> ps '\x80\x02]q\x01(K\x01K\x02K\x03e.' >>> ups = ps.decode('latin1') >>> str(ups) Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeEncodeError: 'ascii' codec can't encode character u'\x80' in position 0: ordinal not in range(128) >>> 

    Возможно, вы используете стандартный (и неэффективный) протокол 0, который создает «удобочитаемый» вывод:

     >>> ps = cPickle.dumps([1,2,3]) >>> ps '(lp1\nI1\naI2\naI3\na.' >>> 

    который, по-видимому, является ASCII (но не документирован как таковой), поэтому str(gem.value) kludge может хорошо «работать» »:

     >>> ps == str(unicode(ps)) True >>> 

    Вы можете исправить это, создав gem.value строку, а не unicode.

    Используйте str(gem.value)

    Python - лучший язык программирования в мире.