У меня возникла проблема при попытке применить регулярное выражение к некоторым строкам, закодированным в латинице-1 (ISO-8859-1).
То, что я пытаюсь сделать, это отправить некоторые данные через HTTP POST со страницы, закодированной в ISO-8859-1, в мое приложение Python и выполнить некоторый анализ данных с использованием регулярных выражений в моем скрипте Python.
Веб-страница использует jQuery для отправки данных на сервер, и я беру текст со страницы, используя метод .text()
. Как только данные отправляются обратно на сервер, они выглядят так: re.compile(r"^[\s,]*(\d*\s*\d*\/*\d)[\s,]*")
- К сожалению, \s
в моем регулярном выражении не соответствует моим данным, и я проследил проблему до того факта, что html-страница использует
, который кодируется в 0xA0
(не -breaking space) и отправляется на сервер. По какой-то причине мой скрипт не интерпретирует этот символ как пробел и не соответствует ему. Согласно python [документация] [1], похоже, что это должно работать, поэтому у меня должна быть проблема с кодировкой.
Затем я хотел попробовать преобразовать строку в юникод и передать ее регулярному выражению, поэтому я попытался просмотреть, что произойдет, когда я преобразую строку: print(unicode(data, 'iso-8859-1'))
.
К сожалению, я получил эту ошибку: UnicodeEncodeError at /script/
'ascii' codec can't encode character u'\xa0' in position 122: ordinal not in range(128)
Однако я запутался - я, очевидно, не пытаюсь использовать декодирование ASCII - пытается ли python декодировать с использованием ASCII, хотя я явно передаю другой кодек?