2011-01-17 3 views
1

Wie kann eine verdeckte Zeichenkette, die die erweiterte Ascii enthält, eine Zahl darstellen, die auf eine Potenz erhöht wird, während der Exponentenwert beibehalten wird? Wenn der String beispielsweise 'm \ xb3/h' ist, der Kubikmeter pro Stunde darstellen soll, möchte ich den String 'm3/h' zurückgeben. Oder 'm \ xb2' sollte 'm2' zurückgeben.Entfernen von erweiterten Ascii mit Beibehaltung von Text

Der Code -

varUnit = 'm\xb3/h' 
varUnit.decode('ascii', 'ignore').endcode('ascii') 
print varUnit 

kehrt 'm/h' während 'm3/h' erwünscht ist.

+1

Diese fast immer ist die Falsche Sache zu tun. Die ASCII-Welt ist fertig. Willkommen bei Unicode! – tchrist

+1

Bitte verwenden Sie Unicode. Es ist 2011. –

+1

@tchrist: Leider gibt es noch viele Legacy-Systeme, die nichts außer ASCII akzeptieren (oder irgendetwas jenseits der Code-Seite, die sie bevorzugen). Es ist nicht ideal, aber es gibt viele Situationen, in denen es das ist, was Sie tun müssen. –

Antwort

2

Nun, die erste Sache zu wissen ist, dass es niemanden gibt, der "erweitert ascii". Ascii wurde auf viele verschiedene Arten erweitert. Ein schneller Test schlägt vor, dass Sie "latin_1" oder "cp1252" möchten. Also, zuerst, wandeln es in Unicode (eine Art und Weise ein beliebiges Zeichen an allen Speichern):

varUnit = varUnit.decode("latin_1") 

EDIT: Wenn Sie es einfach in Ihrer eigenen Anwendung angezeigt werden soll, sollten Sie hier anhalten und Unicode verwenden. print varUnit sollte Ihnen geben. Aber Legacy-Systeme können möglicherweise nicht damit umgehen, in diesem Fall:

Dann müssen Sie es zu Zeichen vereinfachen, die in reinem ASCII dargestellt werden können. Der einfachste Weg, um das unidecode Modul zu verwenden ist (Sie können es pip mit installieren oder easy_install):

from unidecode import unidecode 
print unidecode(varUnit) 
1

Die hochgestellte Ziffern haben Kompatibilität Zersetzungen, so können Sie dies tun:

>>> import unicodedata 
>>> unicodedata.normalize('NFKC', 'm²') 
'm2' 
+0

Gut gemacht! ⁠⁠⁠⁠⁠ – tchrist

Verwandte Themen