Konvertieren Sie eine Unicode-Zeichenfolge in eine Zeichenfolge in Python (mit zusätzlichen Symbolen)

StackOverflow https://stackoverflow.com/questions/1207457

Frage

Wie konvertieren Sie eine Unicode-Zeichenfolge (mit zusätzlichen Zeichen wie £ $, etc.) in einen Python-String?

War es hilfreich?

Lösung

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'

Andere Tipps

Sie können codieren zu ASCII verwenden, wenn Sie die Nicht-ASCII-Zeichen nicht übersetzen müssen:

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

Wenn die Zeichenfolge enthält nur ASCII-Zeichen.

Wenn Sie eine Unicode-Zeichenfolge, und Sie wollen, dass diese in eine Datei schreiben oder andere serialisierten Form, müssen Sie zuerst kodieren es in eine bestimmte Darstellung, die gespeichert werden können. Es gibt mehrere gemeinsame Unicode-Codierungen, wie UTF-16 (verwendet zwei Bytes für die meisten Unicode-Zeichen) oder UTF-8 (1-4 Byte / Codepunkt auf den Charakter abhängig) usw. Um diese Zeichenfolge in eine bestimmte Codierung zu umwandeln, Sie verwenden können:

>>> s= u'£10'
>>> s.encode('utf8')
'\xc2\x9c10'
>>> s.encode('utf16')
'\xff\xfe\x9c\x001\x000\x00'

Diese rohe Folge von Bytes in eine Datei geschrieben werden. Beachten Sie jedoch, dass, wenn es wieder zu lesen, müssen Sie wissen, was es kodiert, ist in und dekodieren, dass gleiche Codierung.

Wenn auf Dateien schreiben, können Sie loswerden dieser Anleitung Encoder / Decoder-Prozess erhalten, indem Sie die Codecs Modul. So öffnen Sie eine Datei, die alle Unicode-Strings in UTF-8 , zu verwenden:

import codecs
f = codecs.open('path/to/file.txt','w','utf8')
f.write(my_unicode_string)  # Stored on disk as UTF-8

Sie, dass etwas anderes beachten Sie, dass diese Dateien verwenden, müssen verstehen, was die Datei-Codierung ist in, wenn sie sie lesen möchten. Wenn Sie die einzige, tun das Lesen sind / das Schreiben ist kein Problem, sonst sicherstellen, dass Sie in einer Form schreiben verständlich, was auch immer sonst die Dateien verwendet.

In Python 3 ist diese Form des Dateizugriff ist die Standardeinstellung, und die eingebauten in open Funktion wird einen Codierungsparameter verwenden und übersetzt immer zu / von Unicode-Strings (das Standard-String-Objekt in Python 3) für in Text geöffneten Dateien Modus.

Hier ist ein Beispiel:

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

Nun, wenn Sie bereit / bereit sind zu Python wechseln 3 (die Sie nicht wegen der rückwärts Inkompatibilität mit einigen 2 Python-Code sein kann), Sie haben keine Umwandlung zu tun; der gesamte Text in Python 3 ist mit Unicode-Strings dargestellt, was auch bedeutet, dass es nicht mehr Nutzung der u'<text>' Syntax ist. Sie haben auch, was ist in der Tat, Strings von Bytes, die Daten darstellen, werden verwendet, um (das eine codierte Zeichenfolge sein können).

http://docs.python.org/3.1/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit

(Natürlich, wenn Sie gerade mit Python 3, dann ist das Problem wahrscheinlich etwas zu tun, wie Sie versuchen, den Text in eine Datei zu speichern.)

Hier ist ein Beispiel-Code

import unicodedata    
raw_text = u"here $%6757 dfgdfg"
convert_text = unicodedata.normalize('NFKD', raw_text).encode('ascii','ignore')
import json, ast
jdata = ast.literal_eval(json.dumps(jdata)) # Removing uni-code chars
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top