Я пытаюсь написать (очень) простой веб-сканер, используя cURL и библиотеку Python BeautifulSoup
(поскольку это намного проще понять, чем GNU awk и беспорядок регулярных выражений).
В настоящее время я пытаюсь передать содержимое веб-страницы в программу с помощью cURL (т.е. curl http://www.example.com/ | ./parse-html.py
)
По какой-то причине Python выдает UnicodeDecodeError
из-за недопустимого начального байта (я просмотрел этот ответ и этот ответ о недопустимых стартовых байтах, но не понял, как решить проблему из них).
В частности, я пытался использовать a.encode('utf-8').split()
из первого ответа. Второй ответ просто объяснил проблему (что Python нашел недопустимый начальный байт), хотя и не дал решения.
Я попытался перенаправить вывод cURL в файл (т.
Я проверил, и вывод locale charmap
равен UTF-8
, что, насколько я знаю, означает, что моя система кодирует символы в UTF-8
(что меня особенно смущает в этом UnicodeDecodeError
.
На данный момент точная строка, вызывающая ошибку, — html_doc = sys.stdin.readlines().encode('utf-8').strip()
. Я попытался переписать это как цикл for, хотя у меня возникла та же проблема.
Что именно вызывает UnicodeDecodeError
и как мне решить эту проблему?
EDIT: изменение строки html_doc = sys.stdin.readlines().encode('utf-8').strip()
на html_doc = sys.stdin
устраняет проблему.