Преобразование строки Unicode в строку в Python (содержащий дополнительные символы)

Как вы преобразовываете строку Unicode (содержащую дополнительные символы, такие как £ $и т.д.) в строку Python?

Ответ 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'

Ответ 2

Вы можете использовать encode для ASCII, если вам не нужно переводить символы, отличные от ASCII:

>>> a=u"aaaàçççñññ"
>>> type(a)
<type 'unicode'>
>>> a.encode('ascii','ignore')
'aaa'
>>> a.encode('ascii','replace')
'aaa???????'
>>>

Ответ 3

Если у вас есть строка 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) для открытых файлов в текстовом режиме.

Ответ 4

>>> text=u'abcd'
>>> str(text)
'abcd'

Если строка содержит только символы ascii.

Ответ 5

Вот пример:

>>> u = u'€€€'
>>> s = u.encode('utf8')
>>> s
'\xe2\x82\xac\xe2\x82\xac\xe2\x82\xac'

Ответ 6

Ну, если вы готовы/готовы перейти на 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, проблема может быть связана с тем, как вы пытаетесь сохранить текст в файл.)

Ответ 7

Вот пример кода

import unicodedata    
raw_text = u"here $%6757 dfgdfg"
convert_text = unicodedata.normalize('NFKD', raw_text).encode('ascii','ignore')