Кодек 'ascii' не может кодировать символ u '\ u2602' в позиции 438: порядковый номер не в диапазоне (128) - PullRequest
0 голосов
/ 15 ноября 2018

Я сталкиваюсь с этой проблемой, когда при попытке декодировать строку я сталкиваюсь с одной ошибкой, когда я пытаюсь кодировать, я сталкиваюсь с другой ошибкой, ошибки ниже, есть ли постоянное решение для этого?

P.S обратите внимание, что вы не сможете воспроизвести ошибку кодирования с предоставленной мною строкой, поскольку я не могу скопировать / вставить некоторые ошибки

text =  "sometext"

string = '\n'.join(list(set(text)))
try:
    print "decode"
    text = string.decode('UTF-8')
except Exception as e:
    print e
    text = string.encode('UTF-8')   

Ошибка: -

ошибка при использовании string.decode ('UTF-8')

'ascii' codec can't encode character u'\u2602' in position 438: ordinal not in range(128)

Ошибка при использовании string.encode ('UTF-8')

Exception All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters

1 Ответ

0 голосов
/ 15 ноября 2018

Первая ошибка

Код, который вы предоставили, будет работать, так как текст является строкой байтов (так как вы используете Python 2).Но то, что вы пытаетесь сделать, это декодировать из строки UTF-8 в ASCII, что возможно, но только если эта строка Unicode содержит только символы, имеющие эквивалент ASCII (вы можете увидеть список символов ASCII здесь ).В вашем случае он сталкивается с символом Unicode (в частности, ☂), который не имеет эквивалента ASCII.Вы можете обойти это поведение, используя:

string.decode('UTF-8', 'ignore')

, который будет просто игнорировать (т.е. заменять ничем) символы, которые не могут быть закодированы в ASCII.

Вторая ошибка

Эта ошибка более интересна.Похоже, что текст, который вы пытаетесь кодировать в UTF-8, содержит либо NULL-байты, либо определенные управляющие символы , которые не разрешены версией Unicode (UTF-8), которую выпытаются закодировать в.Опять же, код, который вы фактически предоставили, работает, но что-то в тексте, который вы пытаетесь кодировать, нарушает кодировку.Вы можете попробовать тот же трюк, что и выше:

string.encode('UTF-8', 'ignore')

, который просто удалит оскорбительные символы, или вы можете посмотреть, что именно в вашем текстовом вводе вызывает проблему.

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