Избавиться от недопустимого символа Юникод в строковой переменной - PullRequest
0 голосов
/ 17 января 2020

Я вставил команду python3 запросов get (не уверен, что это хорошая формулировка), преобразовал ее в json и проанализировал, чтобы получить имя:

'Harrison Elementary School \U0001f3eb'

I посмотрел вверх, и юникод-символ расшифровывается как школа, Юникод-школьный персонаж . Но когда я его печатаю, я получаю:

return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\U0001f3eb' in position 27: character maps to <undefined>

Мне действительно безразлично наличие этого символа Юникода. Это не важно для моих целей.

Как я могу удалить этот символ Unicode и любые другие недействительные символы из этой или любой строки, с которой я столкнулся?

Ответы [ 2 ]

2 голосов
/ 17 января 2020

Символ на самом деле не является недействительным, просто undefined, поэтому, когда вы кодируете, вы часто можете сказать кодировщику, как обрабатывать ошибки:

import codecs 

school_name = "Harrison Elementary School \U0001f3eb"
encoded_name = codecs.charmap_encode(school_name, 'ignore')
print(encoded_name) 

С результатом (b'Harrison Elementary School ', 28)

1 голос
/ 17 января 2020

Сначала вы должны определить, почему символы недопустимы. Похоже, что сообщение об ошибке было сгенерировано, когда вы попытались напечатать строку, что означает, что символ Unicode не может быть закодирован с использованием выходной кодировки по умолчанию. Для print это должно быть sys.stdout.encoding.

. Вы можете самостоятельно кодировать строку и игнорировать недопустимые символы, но в результате вы получите байтовую строку. Необходимо decode эти байты обратно в строку Unicode.

def sanitize(s, encoding, errors='ignore'):
    return s.encode(encoding, errors=errors).decode(encoding)

>>> import sys
>>> print(sanitize('Harrison Elementary School \U0001f3eb', sys.stdout.encoding))
Harrison Elementary School 
...