У меня есть старая программа на C #, которая по разным причинам переносится на Python 3. По сути, программа выполняет выборку веб-сайта и поиск его содержимого (и его обработку, но это не очень актуально). У меня никогда не было проблем с самой процедурой выборки и поиска, но как только я перенес ее на Python, он начал жаловаться на недопустимый юникод в определенных местах.
Это на самом деле не проблема, поскольку фактические исходные данные веб-страницы такие же, как в старом приложении C #, и старая программа достигла своей цели с помощью поврежденных данных. Однако я хочу, чтобы метод Python 3 decode () вел себя так же, как и внутренняя обработка таких случаев в C #. К сожалению, после прочтения руководства по Python и изучения методов обработки ошибок «игнорировать» и «заменить» я действительно не понимаю, что лучше всего имитировать поведение C # (которое я также не смог определить).
Чтобы добавить некоторый код в обсуждение, вот код C #, который все обрабатывает прозрачно:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
response = (HttpWebResponse)request.GetResponse();
reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string html = reader.ReadToEnd();
Соответствующий код Python 3 выглядит следующим образом:
req = Request(url)
r = urlopen(req)
data = r.read().decode("utf_8")
Однако я хочу выяснить, какой из следующих фрагментов кода лучше всего имитирует поведение Unicode в коде C #:
data = r.read().decode("utf_8", "replace")
или
data = r.read().decode("utf_8", "ignore")
Кто-нибудь с глубоким опытом юникода, который может дать мне несколько советов о том, какой метод лучше? Руководство по Python описывает поведение, но не так, чтобы я понял, что я должен использовать ...
Заранее спасибо за любую помощь!