Ошибка декодирования ASCII, хотя все в Unicode (Python 2.7) - PullRequest
0 голосов
/ 25 января 2019

я запускаю скрипт в потоке данных (apache beam), он запускается в python 2.7.12 и выполняет некоторую обработку текста со строками Unicode.

Среди обработки я делаю следующее, где существительное и фраза являются Unicode (я думаю ...)

# -*- coding: utf-8 -*-
...
key = u"{}_{}".format(
    noun, phrase.replace(u" ", u"_")
)

Однако это приводит к ошибкам декодирования ASCII

'ascii' codec can't decode byte 0xe2 in position 1: ordinal not in range(128)

Я могу включить отладку и получить повтор строк, используемых как существительное и фраза , но в настоящее время у меня их нет, так как моя регистрация не выводила их.

Я не понимаю ошибку декодирования ascii, когда думаю, что достаточно конкретен, что хочу все в юникоде!

Можете ли вы дать несколько советов, или я должен вернуться с дополнительной информацией о входных строках?

Ответы [ 2 ]

0 голосов
/ 28 января 2019

коллега напомнил мне, что я всегда могу просто декодировать весь вывод, в данном случае являющийся ключом, в любой формат, который я выбрал.

key = u"{}_{}_{}_{}".format(
     business_unit_id, date, noun, phrase.replace(u" ", u"_")
    ).encode('ascii', 'ignore')

в случае, если я хотел выводить ascii и не заботиться о пропущенных символах, таких как ?.

, я мог бы также использовать ...).encode('utf-8'), если бы я хотел этот вывод в юникоде.

в моем случае я согласился с выводом ascii, так как конвейер в apache beam не казался довольным юникодными ключами в своей карте, уменьшающими конвейеры

0 голосов
/ 25 января 2019

ОК, значит, в вашей строке есть не ascii символ.Вам нужно конвертировать phrase в Unicode напрямую

 phrase.decode('latin-1')

, прежде чем манипулировать в unicode.format

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...