我是unpacking几个结构,其中包含来自C的 's' 类型的字段。这些字段包含C代码中 strncpy 处理的零填充UTF-8字符串(请注意此函数的残余行为)。如果我解码字节,我会得到一个unicode字符串,最后带有许多NUL字符。

>>> b'hiya\0\0\0'.decode('utf8')
'hiya\x00\x00\x00'

我的印象是,尾随零字节是UTF-8的一部分,会被自动删除。

删除零字节的正确方法是什么?

最佳答案

rstripreplace仅在字符串以空值填充到缓冲区末尾时才有效。实际上,缓冲区开始时可能没有初始化为null,所以您可能会得到类似b'hiya\0x\0'的信息。

如果您百分百地知道C代码以空初始化缓冲区开头并且从不重复使用它,那么您可能会发现rstrip更加简单,否则我会选择稍微更困惑但更安全的方法:

>>> b'hiya\0x\0'.split(b'\0',1)[0]
b'hiya'

将第一个null视为终止符。

10-06 02:03