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'>
Вам нужно посмотреть, какая кодировка вам понадобится для японских символов.