Проблема кодировки Python: знак степени и другие - PullRequest
4 голосов
/ 30 января 2012

Я использую BeautifulSoup для очистки данных с веб-страницы.Я хочу сравнить данные веб-сайта с текстом в текстовом документе.Однако у меня, похоже, возникают проблемы с кодировкой.

На веб-сайте есть текст «нагревать до 400 °». Этот текст также выглядит так в «Просмотр источника» (без HTML-сущностей.)

Веб-сайт читается с использованием BeautifulSoup:

source = "my url".read()
....
soup = BeautifulSoup(source)    

Текстовый документ был создан путем создания нового текстового документа, закодированного как «Кодировать в UTF-8 без BOM».Затем я скопировал с веб-сайта в текстовую документацию «нагревать духовку до 400 °» и сохранил.

Текстовый файл читается как

f = codecs.open('myfilename', encoding='utf-8')

Когда я сравниваю две строки,они не равны, но я хочу, чтобы они были.

Чтобы увидеть, что происходит: в Eclipse я разделил два текста и, глядя на переменные в режиме отладки, я вижу, что знак степени из BeautifulSoup выглядит как \ xc2 \ xb0.Знак степени из текстового документа выглядит как \ xb0.

Почему и как это исправить?У меня есть эта проблема со многими специальными символами, поэтому мне нужно общее решение.Также я буду копировать и вставлять данные из нескольких сайтов в текстовый документ.

1 Ответ

1 голос
/ 30 января 2012

Похоже, у Beautiful Soup нет того, что нужно для правильного определения кодировки.Вы можете дать подсказку, заменив BeautifulSoup (источник) на BeautifulSoup (источник, fromEncoding = 'UTF-8').Больше опций и информации на сайте: " Beautiful Soup дает вам Unicode, черт побери ".

Байты \ xc2 \ xb0 - это то, что вы получаете, когда кодировка Unicode в кодировке UTF-8точка U + 00B0 ошибочно принята за последнее предположение Beautiful Soup в кодировке Windows 1252.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...