In Python habe ich einen Text, der Unicode-codiert ist. Dieser Text enthält geschützte Leerzeichen, die ich in 'x' umwandeln möchte. Nicht schließende Räume entsprechen chr(160)
. Ich habe den folgenden Code, der funktioniert, wenn ich es als Django über Eclipse mit Localhost laufen lasse. Es werden keine Fehler und keine fehlerfreien Leerzeichen konvertiert.Python: Ersatz für nicht sperrenden Raum in Unicode
my_text = u"hello"
my_new_text = my_text.replace(chr(160), "x")
Jedoch, wenn ich es auf andere Weise (Python-Befehlszeile, Django über runserver statt Eclipse) betreiben ich erhalte eine Fehlermeldung:
'ascii' codec can't decode byte 0xa0 in position 0: ordinal not in range(128)
Ich denke, der Fehler macht Sinn, weil es versucht, vergleichen Unicode (my_text) zu etwas, das nicht Unicode ist. Meine Fragen sind:
- Wenn
chr(160)
nicht Unicode ist, was ist das? - Wie funktioniert das, wenn ich es von Eclipse aus starte? Wenn ich dies verstehe, würde ich feststellen, ob ich andere Teile meines Codes ändern muss. Ich habe meinen Code von Eclipse getestet.
- (am wichtigsten) Wie löse ich mein ursprüngliches Problem des Entfernens der schussfreien Räume?
my_text
wird definitiv Unicode sein.
Perfect, danke. unichr() funktioniert sowohl über Eclipse als auch nicht über Eclipse. Seltsam, dass chr() und unichr() bei der Ausführung von Eclipse dasselbe Ergebnis liefern. – user984003
Ihre Eclipse-Konfiguration kann die Standardcodierung in UTF8 anstelle von ASCII ändern. Das ist nicht zu empfehlen, für die nun offensichtlichen Kompatibilitätsgründe. In dieser Konfiguration geschriebener Code funktioniert möglicherweise anderswo nicht. –
Tatsächlich ist ASCII (0x00 bis 0x7F) mit UTF-8 kompatibel, da die ersten 128 Codepunkte von UTF-8 mit ASCII übereinstimmen. Allerdings ist 0xa0 definitiv kein ASCII, daher der Fehler bei der Verwendung von 'chr' anstelle von 'unichr' ... – dda