Как работать с unicode в Python

Я пытаюсь очистить весь HTML из строки, поэтому конечный вывод – текстовый файл. У меня есть некоторые исследования по различным «конвертерам», и я начинаю склоняться к созданию своего собственного словаря для сущностей и символов и выполнения замены в строке. Я рассматриваю это, потому что хочу автоматизировать процесс, и есть много изменчивости в качестве базового html. Чтобы начать сравнивать скорость моего решения и одну из альтернатив, например pyparsing, я решил протестировать замену \ xa0 с помощью замены метода string. Я получаю

UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 0: ordinal not in range(128) 

Фактическая строка кода была

 s=unicodestring.replace('\xa0','') 

Во всяком случае, я решил, что мне нужно предисловие с r, поэтому я запустил эту строку кода:

 s=unicodestring.replace(r'\xa0','') 

Он работает без ошибок, но я, когда смотрю на кусочек s, вижу, что \ xaO все еще там

6 Solutions collect form web for “Как работать с unicode в Python”

может быть, вы должны делать

 s=unicodestring.replace(u'\xa0',u'') 
 s=unicodestring.replace('\xa0','') 

.. пытается создать символ юникода \xa0 , что недопустимо в sctring ASCII (тип строки по умолчанию в Python до версии 3.x)

Причина r'\xa0' не была ошибкой, потому что в исходной строке escape-последовательности не влияют. Вместо того, чтобы пытаться кодировать \xa0 в символ юникода, он видел строку как «буквальную обратную косую черту», ​​«буквальный х» и т. Д.

То же самое:

 >>> r'\xa0' '\\xa0' >>> '\\xa0' '\\xa0' 

Это что-то разрешено в Python v3, поскольку тип строки по умолчанию – unicode, поэтому вы можете просто сделать ..

 >>> '\xa0' '\xa0' 

Я пытаюсь очистить весь HTML из строки, так что конечный вывод – это текстовый файл

Я бы настоятельно рекомендовал BeautifulSoup для этого. Написание инструмента для очистки HTML затруднено (учитывая, насколько ужасен большинство HTML), а BeautifulSoup отлично справляется с анализом HTML и работой с Unicode.

 >>> from BeautifulSoup import BeautifulSoup >>> soup = BeautifulSoup("<html><body><h1>Hi</h1></body></html>") >>> print soup.prettify() <html> <body> <h1> Hi </h1> </body> </html> 

Посмотрите стандартную библиотеку кодеков , в частности методы кодирования и декодирования, представленные в базовом классе Codec.

Здесь также есть хорошая статья, которая объединяет все это.

Вместо этого лучше использовать стандартные функции python.

Например:

 string = unicode('Hello, \xa0World', 'utf-8', 'replace') 

или

 string = unicode('Hello, \xa0World', 'utf-8', 'ignore') 

где replace заменит \xa0 на \\xa0 .

Но если \xa0 действительно не имеет смысла для вас, и вы хотите его удалить, используйте ignore .

Просто обратите внимание на очистку HTML. Это очень сложно, поскольку

 < body > 

Является допустимым способом написания HTML. Просто фью.

Вы можете преобразовать его в unicode таким образом:

 print u'Hello, \xa0World' # print Hello, World 
  • Как заставить PyCharm отображать данные Unicode в консоли?
  • Unicode (UTF-8) чтение и запись файлов в Python
  • Преобразование строк, таких как \\ uXXXX в python
  • обрабатывать строку без ascii кода в python
  • Как получить URL-адрес не-ascii с помощью urlopen Python?
  • MIMEText UTF-8 кодирует проблемы при отправке электронной почты
  • python 2.7 нижний регистр
  • Печать Python работает по-разному на разных серверах
  • python - Проблема сохранения символа Unicode для MySQL с Django
  • Имена файлов Python os.stat и unicode
  • BeautifulSoup4 stripped_strings дает мне байтовые объекты?
  •  
    Interesting Posts for Van-Lav

    Четко передайте позиционные аргументы как аргументы и необязательные аргументы как kwargs от argpase к функции

    Как проверить соответствие словаря с пакетом doctest-пакета Python?

    Какой самый простой способ получить статус и фотографии в facebook с помощью python?

    Панель выполнения текста в консоли

    Как исправить регулярное выражение, которое пытается поймать какое-то слово и идентификатор?

    Python – Urllib2 Подождите, пока страница загрузится, чтобы очистить данные

    mod_cgi, mod_fastcgi, mod_scgi, mod_wsgi, mod_python, FLUP. Я не знаю, сколько еще. что такое mod_php эквивалент?

    Как увеличить день в datetime? питон

    Сравнение изображения в url с изображением в файловой системе в python

    Импорт модулей protobuf в пакеты

    Else, elif, если проблемы в Python

    Python: получить первые 10 результатов из списка

    PyOpenCl: как отладить ошибку сегментации?

    Как применить Cython к Pandas DataFrame

    объединение значений для большого количества перекрывающихся интервалов словарных клавиш

    Python - лучший язык программирования в мире.