Как работать с unicode в Python
-
09-09-2019 - |
Вопрос
Я пытаюсь очистить весь HTML-код от строки, чтобы конечным результатом был текстовый файл.У меня есть некоторые исследования по различным "конвертерам", и я начинаю склоняться к созданию своего собственного словаря для сущностей и символов и выполнению замены в строке.Я рассматриваю это, потому что хочу автоматизировать процесс, а качество базового html сильно варьируется.Чтобы начать сравнивать скорость моего решения и одной из альтернатив, например, pyparsing, я решил протестировать замену \xa0, используя строковый метод replace.Я получаю
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','')
.. пытается создать символ юникода \xa0
, который недопустим в sctring в формате ASCII (строковый тип по умолчанию в Python до версии 3.x)
Причина r'\xa0'
ошибка did not вызвана тем, что в необработанной строке escape-последовательности не имеют никакого эффекта.Вместо того, чтобы пытаться кодировать \xa0
в символе Юникода он рассматривал строку как "буквальную обратную косую черту", "буквальный x" и так далее..
Ниже приведены те же самые:
>>> r'\xa0'
'\\xa0'
>>> '\\xa0'
'\\xa0'
Это что-то решенное в Python v3, поскольку строковый тип по умолчанию - unicode, так что вы можете просто сделать..
>>> '\xa0'
'\xa0'
Я пытаюсь очистить весь HTML-код от строки, чтобы конечным результатом был текстовый файл
Я бы настоятельно рекомендовал Прекрасный суп для этого.Написать инструмент для очистки 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>
Вместо этого лучше использовать стандартные возможности Python.
Например:
string = unicode('Hello, \xa0World', 'utf-8', 'replace')
или
string = unicode('Hello, \xa0World', 'utf-8', 'ignore')
где replace
заменит \xa0
к \\xa0
.
Но если \xa0
действительно не имеет для вас смысла, и вы хотите удалить его, а затем используйте ignore
.
Просто замечание относительно очистки HTML.Это очень-очень тяжело, поскольку
<
body
>
Это действительный способ написания HTML.Просто к сведению.
Вы можете преобразовать его в Юникод следующим образом:
print u'Hello, \xa0World' # print Hello, World