Кажется, что ни один из символов в вашей строке не занимает 3 байта в UTF-8:
x = 'below ð\x9f~\x83,'
В любом случае, способ их удаления, если они есть, будет:
filtered_x = ''.join(char for char in x if len(char.encode('utf-8')) < 3)
Например (с такими символами):
>>> x = 'abcd漢字efg'
>>> ''.join(char for char in x if len(char.encode('utf-8')) < 3)
'abcdefg'
Кстати, вы можете проверить, что ваша исходная строка не имеет 3-байтовых кодировок, выполнив следующее:
>>> for char in 'below ð\x9f~\x83,':
... print(char, [hex(b) for b in char.encode('utf-8')])
...
b ['0x62']
e ['0x65']
l ['0x6c']
o ['0x6f']
w ['0x77']
['0x20']
ð ['0xc3', '0xb0']
['0xc2', '0x9f']
~ ['0x7e']
['0xc2', '0x83']
, ['0x2c']
РЕДАКТИРОВАТЬ: дикая догадка
Я полагаю, что ОП задает неправильный вопрос, и вопрос на самом деле, является ли символ для печати.Я предполагаю, что все, что Python отображает как \x<number>
, не предназначено для печати, поэтому это решение должно работать:
x = 'below ð\x9f~\x83,'
filtered_x = ''.join(char for char in x if not repr(char).startswith("'\\x"))
Результат:
'below ð~,'