У меня есть строка, которая выглядит так:
6Â 918Â 417Â 712
Четкий способ обрезать эту строку (как я понимаю в Python) - просто сказать, что строка находится в переменной с именем s
, мы получаем:
s.replace('Â ', '')
Это должно делать свое дело. Но, конечно, он жалуется, что не-ASCII-символ '\xc2'
в файле blabla.py не закодирован.
Я никогда не мог понять, как переключаться между разными кодировками.
Вот код, он действительно такой же, как и выше, но теперь он в контексте. Файл сохраняется в блокноте как UTF-8 и имеет следующий заголовок:
#!/usr/bin/python2.4
# -*- coding: utf-8 -*-
Код:
f = urllib.urlopen(url)
soup = BeautifulSoup(f)
s = soup.find('div', {'id':'main_count'})
#making a print 's' here goes well. it shows 6Â 918Â 417Â 712
s.replace('Â ','')
save_main_count(s)
Не дальше s.replace
...
u
Ответы:
Python 2 использует
ascii
кодировку по умолчанию для исходных файлов, что означает, что вы должны указать другую кодировку в верхней части файла, чтобы использовать символы Unicode, отличные от ascii, в литералах. Python 3 используетutf-8
кодировку по умолчанию для исходных файлов, так что это не проблема.См. Http://docs.python.org/tutorial/interpreter.html#source-code-encoding
Чтобы включить исходную кодировку utf-8, это должно быть в одной из двух верхних строк:
Вышеупомянутое есть в документации, но это также работает:
Дополнительные соображения:
Исходный файл также должен быть сохранен с использованием правильной кодировки в текстовом редакторе.
В Python 2 литерал Unicode должен иметь
u
перед ним, как иs.replace(u"Â ", u"")
в Python 3, просто используйте кавычки. В Python 2 вы можетеfrom __future__ import unicode_literals
получить поведение Python 3, но имейте в виду, что это влияет на весь текущий модуль.s.replace(u"Â ", u"")
также не удастся, еслиs
это не строка в Юникоде.string.replace
возвращает новую строку и не редактирует на месте, поэтому убедитесь, что вы также используете возвращаемое значениеисточник
# coding: utf-8
.-*-
не для украшения, но вряд ли вам когда-нибудь понадобится. Думаю, это было для старых снарядов.edit: мой первый импульс - всегда использовать фильтр, но выражение генератора более эффективно с точки зрения памяти (и короче) ...
Имейте в виду, что это гарантированно работает с кодировкой UTF-8 (потому что все байты в многобайтовых символах имеют самый высокий бит, установленный в 1).
источник
u
если это литерал.источник
Следующий код заменит все символы, отличные от ASCII, на вопросительные знаки.
источник
Использование Regex:
источник
Слишком поздно для ответа, но исходная строка была в UTF-8, а '\ xc2 \ xa0' - это UTF-8 для NO-BREAK SPACE. Просто декодируйте исходную строку как
s.decode('utf-8')
(\ xa0 отображается как пробел при неправильном декодировании как Windows-1252 или latin-1:Пример (Python 3)
Вывод
источник
Это распечатает
6 918 417 712
источник
Я знаю, что это старый поток, но я чувствовал себя обязанным упомянуть метод translate, который всегда является хорошим способом заменить все коды символов выше 128 (или другие, если необходимо).
Использование : ул. перевести ( таблица [, deletechars] )
Начиная с Python 2.6 , вы также можете установить для таблицы значение None и использовать deletechars для удаления ненужных символов, как в примерах, показанных в стандартных документах по адресу http://docs.python.org/library/stdtypes. html .
В строках Unicode таблица перевода представляет собой не 256-символьную строку, а dict с ord () соответствующих символов в качестве ключей. Но в любом случае получить правильную строку ascii из строки unicode достаточно просто, используя метод, упомянутый выше Truppo, а именно: unicode_string.encode ("ascii", "ignore")
Подводя итог, если по какой-то причине вам абсолютно необходимо получить строку ascii (например, когда вы вызываете стандартное исключение с помощью
raise Exception, ascii_message
), вы можете использовать следующую функцию:Преимущество translate в том, что вы можете преобразовать символы с диакритическими знаками в соответствующие символы ascii без акцента вместо того, чтобы просто удалять их или заменять на '?'. Это часто бывает полезно, например, для индексирования.
источник
и сделайте свой
.py
файл unicode.источник
Это грязный прием, но он может сработать.
источник
Как бы то ни было, у меня был набор символов,
utf-8
и я включил классическую# -*- coding: utf-8 -*-
строчку " ".Однако при чтении этих данных с веб-страницы я обнаружил, что у меня не было универсальных новых строк.
В моем тексте было два слова, разделенных знаком «
\r\n
». Я только разрезал\n
и заменил"\n"
.Как только я просмотрел и увидел рассматриваемый набор символов, я понял ошибку.
Таким образом, он также может быть в наборе символов ASCII , но это символ, которого вы не ожидали.
источник