2016-08-29 1 views
1

Ich möchte die Zeichenkette I have £300 teilen, aber es scheint, dass die Split-Funktion zuerst wandelt es in eine ASCII und nach. Aber ich kann es nicht wieder in Unicode konvertieren wie zuvor.Kann eine Unicode-Zeichenkette nicht teilen, ohne in ascii zu konvertieren - Python 2.7

Gibt es eine andere Möglichkeit, eine solche Unicode-Zeichenfolge zu trennen, ohne sie wie im folgenden Abschnitt zu unterbrechen.

# -*- coding: utf-8 -*- 
mystring = 'I have £300.' 
alist = mystring.split() 
alist = [item.decode("utf-8") for item in alist] 
print "alist",alist 
print "mystring.split()",mystring.split() 

#I want to get [I,have,£300] 
#I get: ['I', 'have', '\xc2\xa3300.'] 
+0

Strings sind ASCII in Python 2. –

+0

Ok, aber wie teile ich in der Art, wie ich will? – Brana

Antwort

3

Sie suchen Python 2 zeigt Daten bei einer Begrenzung des Weges.

mit Python 2:

>>> mystring = 'I have £300.' 
>>> mystring.split() 
['I', 'have', '\xc2\xa3300.'] 

Aber beachten Sie, dass es druckt, wie Sie wollen:

>>> print(mystring.split()[2]) 
£300. 

mit Python 3, dagegen zeigt es, wie Sie möchten:

>>> mystring = 'I have £300.' 
>>> mystring.split() 
['I', 'have', '£300.'] 

Ein Hauptgrund für die Verwendung von Python 3 ist seine überlegene Handhabung von Unicode.

+0

Irgendeine Problemumgehung - wie ich Python 2.6.6 auf meinem Server habe? – Brana

+0

@Brana Wenn Sie die Zeichenfolge selbst ausdrucken, im Gegensatz zu einer Liste, die sie enthält, wird sie angezeigt, wie Sie möchten. – John1024

+0

In erhalten, aber es gibt ein Problem mit anderen Dingen wie die Verarbeitung der Zeichenfolge, ist es vielleicht möglich, Standardcodierung UTF-8 zu sein? – Brana

1

Das Problem ist nicht mit split(). Das eigentliche Problem ist, dass die Handhabung von Unicode in Python 2 verwirrend ist.

Die erste Zeile in Ihrem Code erzeugt eine Zeichenfolge, d. H. Eine Sequenz von Bytes, die die UTF-8-Codierung des Symbols £ enthält. Sie können dies bestätigen Sie mit der repr Ihrer ursprünglichen Zeichenfolge anzuzeigen:

>>> mystring 
'I have \xc2\xa3300.' 

Der Rest der Aussagen nur das tun, was Sie von ihnen mit einer solchen Eingabe erwarten würde. Wenn Sie mit Unicode arbeiten möchten, eine Unicode-String erstellen, mit zu beginnen:

>>> mystring = u'I have £300.' 

Eine weitaus bessere Lösung ist jedoch zu Python wechseln 3. Kopf umschlingenden die Semantik von Unicode in Python 2 nicht ist lohnt sich, wenn es eine so überlegene Alternative gibt.

Verwandte Themen