Я пытаюсь поэкспериментировать с веб-скребком в программе на Python. HTML-страница, которую я получаю, имеет формат utf-8. У меня проблемы со следующим персонажем: «?»
Я полагаю, что это связано с тем, что символ занимает 4 байта (кодирует в b '\ xf0 \ xa0 \ x86 \ xa2'). Я также отметил, что Windows не дружелюбна к utf-8, и я пользователь Windows.
Я попытался найти способ разобрать текст и удалить плохой 4-байтовый символ, когда он появляется в течение нескольких часов безуспешно. Поскольку символ является частью полной строки текста, я хотел бы проанализировать строку и удалить только не декодируемый символ.
def TryDecode(toParse):
try:
result = toParse.decode('utf-8', 'ignore') #No exception
except UnicodeEncodeError:
result = 'error'
return result
badutf = b' <li ...>\xf0\xa0\x86\xa2</li>\r\n'
res = TryDecode(badutf)
print("I see this")
print(res) # UnicodeEncodeError
print("I do not see this.")
Ожидаемые результаты: ошибка в блоке try или ее отсутствие.
Фактические результаты: нет ошибок до второго оператора печати.
Примечание. Если я включу символ «?» в свой сценарий, его также невозможно будет запустить из среды IDE.
Редактировать: Благодаря полезному совету я теперь понимаю проблему. Вот решение, если кто-то еще сталкивается с подобной проблемой:
UCSTWOMAX = 65536 # Max value for UCS-2 formatting
def TryDecode(toParse):
try:
parsed = toParse.decode('utf-8', 'ignore')
result = ''
for c in parsed:
if ord(c) < UCSTWOMAX:
result += c
except UnicodeEncodeError:
result = 'error'
return result
badutf = b' <li ...>\xf0\xa0\x86\xa2</li>\r\n'
res = TryDecode(badutf)
print(res)
print("I see this now.")