В Python 3, как вы удаляете все символы не-UTF8 из строки? - PullRequest
1 голос
/ 28 января 2020

Я использую Python 3.7. Как удалить все символы, не относящиеся к UTF-8, из строки? Я попытался использовать "lambda x: x.decode ('utf-8', 'ignore'). Encode (" utf-8 ")" в приведенном ниже

coop_types = map(
    lambda x: x.decode('utf-8','ignore').encode("utf-8"),
    filter(None, set(d['type'] for d in input_file))
)

, но это приводит к ошибке ...

Traceback (most recent call last):
  File "scripts/parse_coop_csv.py", line 30, in <module>
    for coop_type in coop_types:
  File "scripts/parse_coop_csv.py", line 25, in <lambda>
    lambda x: x.decode('utf-8','ignore').encode("utf-8"),
AttributeError: 'str' object has no attribute 'decode'

Если у вас есть общий c способ удалить все символы не-UTF8 из строки, это все, что я ищу.

1 Ответ

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

Вы начинаете со строки. Вы не можете decode a str (это уже декодированный текст, вы можете только снова закодировать его в двоичные данные). UTF-8 кодирует практически любой допустимый текст в Юникоде (который хранит str), так что это не должно вызывать особых затруднений, но если вы встретите суррогатных символов во входных данных, вы можете просто повернуть вспять направления меняются:

x.decode('utf-8','ignore').encode("utf-8")

на:

x.encode('utf-8','ignore').decode("utf-8")

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

...