2013-10-29 6 views
8

Python3 änderte das Unicode-Verhalten, um Surrogat-Paare abzulehnen, während Python2 nicht.SurrogateScape in python2

Es ist eine Frage here

Aber es liefert keine Lösung, wie Ersatzpaare in python2 zu entfernen oder wie Surrogat Flucht zu tun.

Python3 Beispiel:

>>> a = b'\xed\xa0\xbd\xe4\xbd\xa0\xe5\xa5\xbd' 
>>> a.decode('utf-8', 'surrogateescape') 
'\udced\udca0\udcbd你好' 
>>> a.decode('utf-8', 'ignore') 
'你好' 

Die '\ feste \ xa0 \ xbd' ist hier nicht die richtige utf-8 Zeichen. Und ich möchte sie ignorieren oder ihnen entkommen.

Ist es möglich, in python2 dasselbe zu tun?

+0

Was genau möchten Sie tun? Es ist nicht klar. Geben Sie ein Beispiel an. –

+0

@MarkTolonen Ich habe ein Beispiel hinzugefügt. – lxyu

+0

Ich sehe keinen besseren Weg als die Nachbearbeitung des decodierten Unicode-Objekts, um alle Zeichen zwischen '\ udc00' und '\ udfff' zu entfernen. –

Antwort

5

Es gibt keine eingebaute Lösung, aber es ist eine Implementierung von surrogateescapes in Python-Zukunft: https://github.com/PythonCharmers/python-future

hinzufügen from future.utils.surrogateescape import register_surrogateescape zu den Importen. Dann rufen Sie die Methode register_surrogateescape() und dann können Sie die errors='surrogateescape' Error-Handler in encode und decode verwenden.

Ein Beispiel finden Sie here

Verwandte Themen