8 ответов:
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'
вы можете использовать кодирование в ASCII, если вам не нужно переводить символы, отличные от ASCII:
>>> a=u"aaaàçççñññ" >>> type(a) <type 'unicode'> >>> a.encode('ascii','ignore') 'aaa' >>> a.encode('ascii','replace') 'aaa???????' >>>
Если у вас есть строка Unicode, и вы хотите записать ее в файл или другую сериализованную форму, вы должны сначала кодирование это в определенное представление, которое может быть сохранено. Существует несколько распространенных кодировок Юникода, таких как UTF-16 (использует два байта для большинства символов Юникода) или UTF-8 (1-4 байта / кодовая точка в зависимости от символа) и т. д. Чтобы преобразовать эту строку в определенную кодировку, вы можете использовать:
>>> s= u'£10' >>> s.encode('utf8') '\xc2\x9c10' >>> s.encode('utf16') '\xff\xfe\x9c\x001\x000\x00'эта необработанная строка байтов может быть записывается в файл. Однако обратите внимание, что при чтении его обратно, вы должны знать, в какой кодировке он находится и декодировать его с помощью той же кодировки.
при записи в файлы, вы можете избавиться от этого ручного процесса кодирования / декодирования с помощью кодеки. Итак, чтобы открыть файл, который кодирует все строки 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) для файлов, открытых в текстовом режиме.
Ну, если вы хотите / готовы переключиться на 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')
Comments