Я получаю странное сообщение об ошибке при попытке повернуть объект байтов в строку:TypeError: декодирование ул не поддерживается (Python 3.4)
Traceback (most recent call last):
File "/home/Scraper_v1.0.py", line 149, in <module>
rawjsonstr = str(rawjsonstr, 'utf-16')
TypeError: decoding str is not supported
Мой код выглядит следующим образом:
# preparing string
try:
rawjsonstr = "".join(rawjson[3]).encode('utf-16') # used to select the correct text/javascript node
except IndexError:
errorcount += 1
with open(filepath, "at") as f:
write = csv.writer(f)
write.writerow(["Error: no valid JSON found",
statenum,
statesubnum,
suburbnum,
listingnum,
listingsurlstr])
pass
rmvlist = ["var digitalData = ",
"var titanEnabled = true;",
"titan = titan || {};",
"// enable the command queue to allow spa execution in the correct order",
"titan.cmd = titan.cmd || [];"]
rawjsonstr = str(rawjsonstr, 'utf-16')
Редактировать
Повторно запускали выше код без кодирования/декодирования. Теперь получите следующую ошибку в том же цикле.
Traceback (most recent call last):
File "/home/isaac/PycharmProjects/ResidentialData/AllHomesScraper_v1.0.py", line 162, in <module>
jsondata = json.loads(rawjsonstr)
File "/usr/lib64/python3.4/json/__init__.py", line 318, in loads
return _default_decoder.decode(s)
File "/usr/lib64/python3.4/json/decoder.py", line 343, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib64/python3.4/json/decoder.py", line 359, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Expecting ',' delimiter: line 1 column 1033 (char 1032)
Я вновь запустить его и захватить строку, которая вызывает эту ошибку (похоже, что это просто неправильно отформатированные данные в формате JSON).
Редактировать: Решение представлено ниже.
Подождите, почему вы кодируете строку, а затем сразу ее декодируете? Кажется, что вы, вероятно, оставили что-то, что делает экземпляр 'rawjsonstr'' str' вместо экземпляра 'bytes', когда выполнение попадает в' str (rawjsonstr, 'utf-16') '. – user2357112
Это не имеет смысла. кодирование и декодирование глупо, но оно должно работать по определению. Если вы кодируете UTF-16, затем декодируете одни и те же данные с помощью UTF-16, то это должно быть без проблем. Если вы можете воспроизвести, заверните 'str (rawjsonstr, 'utf-16')' в 'try/except' и напечатайте' print (type (rawjsonstr), repr (rawjsonstr)) ', чтобы увидеть, что он не работает. Я предполагаю, что вы оставили критический код, но если нет, нам нужно больше информации, чтобы определить проблему. – ShadowRanger
Код был первоначально написан на Python 2.7. Я перешел на 3,4-интерпретатор и столкнулся с несколькими проблемами вокруг изменений формата байтов/строк. Затем я использовал проб и ошибок с различными комбинациями кодирования/декодирования, пока это не сработало, поэтому почему это может показаться странным. Я буду использовать try/except wrapper, чтобы попытаться определить, в чем проблема. – doubleknavery