Zeige nicht druckbare Zeichen in einer Zeichenkette

10

Ist es möglich, nicht druckbare Zeichen in einer Python-Zeichenkette mit ihren Hex-Werten zu visualisieren?

z.B. Wenn ich eine Zeichenfolge mit einer neuen Zeile habe, möchte ich sie durch \x0a ersetzen.

Ich weiß, dass es repr() gibt, was mir ... \n gibt, aber ich suche nach der Hex-Version.

    
georgij 18.12.2012, 07:00
quelle

5 Antworten

4

Sie müssen die Übersetzung manuell vornehmen. Gehe zum Beispiel mit einem regulären Ausdruck durch die Zeichenfolge und ersetze jedes Vorkommen durch das Hexadezimaläquivalent.

%Vor%

Das obige Beispiel vergleicht nur Zeilenumbrüche und Zeilenumbrüche, aber Sie können erweitern, welche Zeichen übereinstimmen, einschließlich der Verwendung von \x Escape-Codes und Bereichen.

%Vor%     
Martijn Pieters 18.12.2012, 07:10
quelle
11

Ich kenne keine eingebaute Methode, aber es ist ziemlich einfach, mit einem Verständnis zu tun:

%Vor%     
ecatmur 18.12.2012 14:55
quelle
7

Ich bin irgendwie zu spät zur Party, aber wenn Sie es für das einfache Debuggen brauchen, fand ich, dass das funktioniert:

%Vor%

Hässlich, aber es hat mir geholfen, nicht druckbare Zeichen in einer Zeichenfolge zu finden.

    
Carcigenicate 01.03.2015 00:58
quelle
1

Die Änderung der ecatmur-Lösung für nicht druckbare Nicht-ASCII-Zeichen macht es weniger trivial und anstößiger:

%Vor%

Natürlich, wenn str.isprintable nicht genau die gewünschte Definition ist, können Sie eine andere Funktion schreiben. (Beachten Sie, dass es sich um ein ganz anderes Set als in string.printable handelt, das nicht mit ASCII druckbare und nicht druckbare Zeichen behandelt. Es berücksichtigt auch \n , \r , \t , \x0b und \x0c . als nicht druckbar.

Sie können das kompakter machen; Dies ist explizit nur um alle Schritte im Umgang mit Unicode-Strings zu zeigen. Zum Beispiel:

%Vor%

Wirklich, egal was du tust, du wirst \r , \n und \t explizit behandeln müssen, weil alle eingebauten und stdlib-Funktionen, von denen ich weiß, über sie entkommen werden diese speziellen Sequenzen anstelle ihrer Hex-Versionen.

    
abarnert 18.12.2012 21:56
quelle
0

Ich habe etwas Ähnliches einmal getan, indem ich eine str Unterklasse mit einer benutzerdefinierten __repr__() Methode abgeleitet habe, die getan hat was ich wollte. Es ist nicht genau das, was Sie suchen, aber vielleicht geben Sie Ihnen einige Ideen.

%Vor%     
martineau 18.12.2012 12:24
quelle

Tags und Links