Konvertiert null-gepolsterte bytes in UTF-8-string
Ich bin Auspacken mehrere Strukturen enthalten " s "
- Typ-Felder von C. enthalten Die Felder mit Nullen aufgefüllt UTF-8-Zeichenfolgen behandelt strncpy
in den C-code (Hinweis: diese Funktion ist verkümmert Verhalten). Wenn ich decode bytes bekomme ich einen unicode-string mit vielen NUL
Zeichen am Ende.
>>> b'hiya\0\0\0'.decode('utf8')
'hiya\x00\x00\x00'
War ich unter dem Eindruck, dass nachgestellte null-bytes wurden Teil von UTF-8 und wäre automatisch gelöscht.
Was ist der richtige Weg, um die drop null bytes?
InformationsquelleAutor der Frage Matt Joiner | 2011-02-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Entweder
rstrip
oderreplace
wird nur funktionieren, wenn der string ist gepolstert, das auf das Ende des Puffers, mit null. In der Praxis wird der Puffer kann nicht initialisiert um null zu beginnen, so bekommen Sie vielleicht so etwas wieb'hiya\0x\0'
.Wenn Sie wissen, kategorisch zu 100%, dass der C-code beginnt mit einer null initialisiert Puffer und nie nie wieder benutzt, dann findest du vielleicht
rstrip
um einfacher zu sein, sonst würde ich gehen für die etwas chaotischer, aber sehr viel sicherer:behandelt die erste null als terminator.
InformationsquelleAutor der Antwort Duncan
Verwenden
str.rstrip()
, entfernen Sie die nachfolgende NULs:InformationsquelleAutor der Antwort Adam Rosenfield
Im Gegensatz zu den split/partition-Lösung nicht kopieren Sie mehrere strings und könnte schneller sein für lange bytearrays.
InformationsquelleAutor der Antwort phobie
Vielleicht könnten Sie nennen
.replace('\0', '')
und reinigen Sie Sie?InformationsquelleAutor der Antwort Paul Schreiber