Ответ 1
может быть, вы должны делать
s=unicodestring.replace(u'\xa0',u'')
Я пытаюсь очистить весь 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 все еще там
может быть, вы должны делать
s=unicodestring.replace(u'\xa0',u'')
s=unicodestring.replace('\xa0','')
.. пытается создать символ unicode \xa0
, который недопустим в ASCII sctring (тип строки по умолчанию в Python до версии 3.x)
Причина r'\xa0'
не была ошибкой, потому что в исходной строке escape-последовательности не влияют. Вместо того, чтобы пытаться кодировать символ \xa0
в символ юникода, он видел строку как "буквальную обратную косую черту", "литерал x" и т.д.
То же самое:
>>> 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>
Посмотрите на стандартную библиотеку codecs, в частности encode и декодировать. > в базовом классе Codec.
Здесь также есть хорошая статья , которая ставит все это вместе.
Вместо этого лучше использовать стандартные функции python.
Например:
string = unicode('Hello, \xa0World', 'utf-8', 'replace')
или
string = unicode('Hello, \xa0World', 'utf-8', 'ignore')
где replace
заменит \xa0
на \\xa0
.
Но если \xa0
действительно не имеет смысла для вас, и вы хотите его удалить, используйте ignore
.
Просто обратите внимание на очистку HTML. Это очень сложно, так как
<
body
>
Является допустимым способом написания HTML. Просто fyi.
Вы можете преобразовать его в unicode таким образом:
print u'Hello, \xa0World' # print Hello, World