it-swarm.com.de

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

Wie konvertieren Sie eine Unicode-Zeichenfolge (die zusätzliche Zeichen wie £ $ usw. enthält) in eine Python-Zeichenfolge?

476
williamtroup
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'
545
Sorantis

Sie können encode to 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???????'
>>>
310
Ferran
>>> text=u'abcd'
>>> str(text)
'abcd'

Wenn die Zeichenfolge nur ASCII-Zeichen enthält.

127
igco

Wenn Sie über eine Unicode-Zeichenfolge verfügen und diese in eine Datei oder eine andere serialisierte Form schreiben möchten, müssen Sie sie zuerst in eine bestimmte Darstellung codieren , die gespeichert werden kann. Es gibt verschiedene gängige Unicode-Codierungen, z. B. UTF-16 (verwendet zwei Bytes für die meisten Unicode-Zeichen) oder UTF-8 (1-4 Bytes/Codepunkt je nach Zeichen) usw. Um diese Zeichenfolge in eine bestimmte Codierung zu konvertieren, müssen Sie Kann benutzen:

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

Diese rohe Zeichenfolge von Bytes kann in eine Datei geschrieben werden. Beachten Sie jedoch, dass Sie beim Zurücklesen wissen müssen, in welcher Codierung sie enthalten ist, und dass Sie sie mit derselben Codierung decodieren müssen.

Wenn Sie in Dateien schreiben, können Sie diesen manuellen Kodierungs-/Dekodierungsprozess mithilfe des Moduls Codecs beseitigen. Um eine Datei zu öffnen, die alle Unicode-Zeichenfolgen in TF-8 codiert, verwenden Sie:

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

Beachten Sie, dass alle anderen Elemente, die diese Dateien verwenden, die Kodierung der Datei verstehen müssen, wenn sie gelesen werden sollen. Wenn Sie der einzige sind, der das Lesen/Schreiben durchführt, ist dies kein Problem. Stellen Sie ansonsten sicher, dass Sie in einer Form schreiben, die für alle anderen Verwendungszwecke der Dateien verständlich ist.

In Python 3 ist diese Form des Dateizugriffs die Standardeinstellung, und die integrierte Funktion open verwendet einen Codierungsparameter und übersetzt immer in/aus Unicode-Zeichenfolgen (das Standardzeichenfolgenobjekt in _).Python 3) für Dateien, die im Textmodus geöffnet wurden.

112
Brian

Hier ist ein Beispiel:

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

Nun, wenn Sie bereit sind, zu Python 3 zu wechseln (was möglicherweise nicht auf die Inkompatibilität mit irgendeinem Python 2-Code zurückzuführen ist), müssen Sie dies nicht tun konvertieren; Der gesamte Text in Python 3 wird mit Unicode-Zeichenfolgen dargestellt. Dies bedeutet auch, dass die u'<text>' -Syntax nicht mehr verwendet wird. Sie haben auch so genannte Bytefolgen, die zur Darstellung von Daten verwendet werden (bei denen es sich möglicherweise um eine codierte Zeichenfolge handelt).

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

(Wenn Sie derzeit Python 3 verwenden, hängt das Problem wahrscheinlich damit zusammen, wie Sie versuchen, den Text in einer Datei zu speichern.)

5
JAB

Hier ist ein Beispielcode

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