Ответ 1
title = u"Klüft skräms inför på fédéral électoral große"
import unicodedata
unicodedata.normalize('NFKD', title).encode('ascii','ignore')
'Kluft skrams infor pa federal electoral groe'
Как вы преобразовываете строку Unicode (содержащую дополнительные символы, такие как £ $и т.д.) в строку Python?
title = u"Klüft skräms inför på fédéral électoral große"
import unicodedata
unicodedata.normalize('NFKD', title).encode('ascii','ignore')
'Kluft skrams infor pa federal electoral groe'
Вы можете использовать encode для ASCII, если вам не нужно переводить символы, отличные от ASCII:
>>> a=u"aaaàçççñññ"
>>> type(a)
<type 'unicode'>
>>> a.encode('ascii','ignore')
'aaa'
>>> a.encode('ascii','replace')
'aaa???????'
>>>
Если у вас есть строка Unicode и вы хотите записать ее в файл или другую сериализованную форму, вы должны сначала закодировать ее в конкретное представление, которое можно сохранить. Существует несколько общих кодировок Unicode, таких как UTF-16 (для большинства символов Unicode используются два байта) или UTF-8 (1-4 байта/код в зависимости от символа) и т.д. Чтобы преобразовать эту строку в конкретную кодировку, вы может использовать:
>>> s= u'£10'
>>> s.encode('utf8')
'\xc2\x9c10'
>>> s.encode('utf16')
'\xff\xfe\x9c\x001\x000\x00'
Эта необработанная строка байтов может быть записана в файл. Однако имейте в виду, что, читая его, вы должны знать, в какую кодировку он находится и декодировать его, используя ту же самую кодировку.
При записи в файлы вы можете избавиться от этого ручного процесса кодирования/декодирования с помощью модуля codecs. Итак, чтобы открыть файл, который кодирует все строки Unicode в UTF-8, используйте:
import codecs
f = codecs.open('path/to/file.txt','w','utf8')
f.write(my_unicode_string) # Stored on disk as UTF-8
Обратите внимание, что что-либо еще, использующее эти файлы, должно понимать, в какой кодировке находится файл, если они хотят их прочитать. Если вы единственный, кто делает чтение/запись, это не проблема, иначе убедитесь, что вы пишете в форме, понятной любым другим, использующим файлы.
В Python 3 эта форма доступа к файлам по умолчанию, а встроенная функция open
будет принимать параметр кодирования и всегда переводить в/из строк Unicode (стандартный строковый объект в Python 3) для открытых файлов в текстовом режиме.
>>> text=u'abcd'
>>> str(text)
'abcd'
Если строка содержит только символы ascii.
Вот пример:
>>> u = u'€€€'
>>> s = u.encode('utf8')
>>> s
'\xe2\x82\xac\xe2\x82\xac\xe2\x82\xac'
Ну, если вы готовы/готовы перейти на Python 3 (что может быть не из-за обратной совместимости с кодом Python 2), вам не нужно делать никаких преобразований; весь текст в Python 3 представлен строками Unicode, что также означает, что больше не используется синтаксис u'<text>'
. У вас также есть то, что по сути является строками байтов, которые используются для представления данных (которые могут быть закодированной строкой).
http://docs.python.org/3.1/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit
(Конечно, если вы в настоящее время используете Python 3, проблема может быть связана с тем, как вы пытаетесь сохранить текст в файл.)
Вот пример кода
import unicodedata
raw_text = u"here $%6757 dfgdfg"
convert_text = unicodedata.normalize('NFKD', raw_text).encode('ascii','ignore')