Phpserialize : требуется байтоподобный объект, а не 'str'

Я перевожу сайт с Cakephp на django и у меня возникла проблема с использованием функции unserialize из php.

$details = unserialize(temp);

Я преобразовал это в python как ->

from phpserialize import *
details = loads(temp)

Я получаю эту ошибку

a bytes-like object is required, not 'str'

Мои данные содержат в основном японские символы и выглядят следующим образом ->

a:15:{
  s:9:"CandidateA";a:9:{
    s:4:"mail";s:21:"somemail@gmail.com";
    s:4:"name";s:22:"name1";
    s:7:"something1";s:19:"something";
    s:6:"mobile";s:13:"12345678";
    s:7:"zipcode";s:8:"123456";
    s:9:"address_1";s:18:"address1";
    s:9:"address_2";s:5:"0987659";
    s:15:"something2";s:9:"something3";
    s:6:"street";s:24:"address2";
  }
   s:6:"CandidateB";a:9:{
    s:4:"mail";s:21:"somemail@gmail.com";
    s:4:"name";s:22:"name1";
    s:7:"something1";s:19:"something";
    s:6:"mobile";s:13:"12345678";
    s:7:"zipcode";s:8:"123456";
    s:9:"address_1";s:18:"address1";
    s:9:"address_2";s:5:"0987659";
    s:15:"something2";s:9:"something3";
    s:6:"street";s:24:"address2";
  }
  ----
  ----
  ----
  ----
  ----


}


---- означает, что повторений больше.

Помогите, пожалуйста.

Тип temp, похоже, строка, что означает, что он содержит символ utf-8. Но вам нужен байтоподобный объект.

Чтобы преобразовать строку в байтоподобный объект, необходимо ее закодировать.

>>> temp='whatever'
>>> print(temp)
whatever
>>> type(temp)
<class 'str'>

>>> btemp = temp.encode('utf-16')
>>> print(btemp)
b'\xff\xfew\x00h\x00a\x00t\x00e\x00v\x00e\x00r\x00'
>>> type(btemp)
<class 'bytes'>

Вам нужно посмотреть, какая кодировка вам понадобится для японских символов.

Вернуться на верх