Beachten Sie, dass, was, ohne \
mit \\
zu ersetzen, was Sie wollen, nicht reversibel ist; z.B. Sie können nicht wissen, ob die tatsächliche Zeichenfolge '好'
(ein Zeichen) oder '\\u597d'
(6 Zeichen in Ascii-Bereich) war, da beide \u597d
als Ausgabe produzieren würden. Martijns Vorschlag macht den Backslash-Ersatz und ist reversibel.
Sie könnten nur die Umwandlung machen Sie sich selbst:
def unicodeescape(s):
return ''.join(c if ord(c) < 128 else '\\u%04x' % ord(c) for c in s)
print(unicodeescape('你好'))
(Martijn Anmerkung über Zeichen außerhalb der BMP gilt nach wie vor)
Wenn Sie dies alles, was das Programm Ausgänge tun wollen, und versucht sich zu erinnern alles durch eine Umwandlungsfunktion scheint nicht von einer guten Zeit wie Ihre Idee zu passieren, könnte man auch so etwas wie dies versucht:
import codecs, sys
def unicodeescapereplace(error):
if isinstance(error, UnicodeEncodeError):
s = error.object[error.start:error.end]
repl = ''.join('\\u%04x' % ord(c) for c in s)
return (repl, error.end)
raise error
codecs.register_error('unicodeescapereplace', unicodeescapereplace)
sys.stdout = codecs.getwriter('ascii')(sys.stdout.buffer, 'unicodeescapereplace')
print('你好')
T Er erstellt einen benutzerdefinierten Codierungsfehlerhandler, der UnicodeEncodeErrors behandelt, indem er das problematische Zeichen durch einen Unicode-Escape ersetzt. Sie können es wie '你好'.encode('ascii', 'unicodeescapereplace')
verwenden, oder ersetzen Sie das stdout wie im obigen Beispiel durch eines, das es automatisch für alle Codierung verwendet.
@jDo Was in Gottes Namen sagst du sogar? – AlanSTACK
Strings in Python 3 sollten standardmäßig utf-8 verwenden. Die richtige Lösung ist, herauszufinden, warum Ihre Zeichenfolge in ASCII statt UTF-8 ist und das zu beheben. – Carpetsmoker
@Alan Ja, ich weiß es nicht. Ich werde diesen nutzlosen Kommentar löschen: D Aber konnten Sie die Ausnahmebehandlung nicht auf diese Weise verwenden und die dumme Druckanweisung einfach durch etwas anderes ersetzen? (vorausgesetzt, dass Sie den Codierungsfehler nicht beheben möchten, wie Carpetsmoker vorschlägt) – jDo