Python 3 - неправильное декодирование символов ascii (Python 2.7 работает хорошо) - PullRequest
0 голосов
/ 27 июня 2018

Через HTTP API я получаю массив целых чисел, [37,80,68,70,45] - и так далее, представляющий коды ascii. Мне нужно сохранить его в формате PDF. В php код это:

$data = file_get_contents($url);
$pdf_data = implode('', array_map('chr', json_decode($data)));
file_put_contents($file_path.".pdf", $pdf_data);

и работает нормально.

Но в питоне 3:

http_request_data = urllib.request.urlopen(url).read()
data = json.loads(http_request_data)
pdf_data = ''.join(map(chr, data))
with open(file_path, 'w') as fout:
    fout.write(pdf_data)

PDF-файл результата поврежден и не может быть прочитан

В чем может быть проблема?

EDIT:

Пробовал с python 2.7, файл открывается и все хорошо. Проблема не решена, она мне нужна в python 3.6

1 Ответ

0 голосов
/ 28 июня 2018

Когда он работает в Python2, а не в Python3, намек на то, что это, вероятно, вызвано проблемой с байтом или юникодом.

Строки и символы являются байтами в Python2 и Unicode в Python3. Если ваш код работает на Python2, его эквивалент Python3 должен быть:

http_request_data = urllib.request.urlopen(url).read()
data = json.loads(http_request_data)
pdf_data = bytes(data)                 # construct a bytes string
with open(file_path, 'wb') as fout:    # file must be opened in binary mode
    fout.write(pdf_data)
...