簡體   English   中英

將零填充字節轉換為UTF-8字符串

[英]Convert zero-padded bytes to UTF-8 string

我正在壓縮包含來自C的's'類型字段的幾個結構。字段包含由C代碼中的strncpy處理的零填充UTF-8字符串(注意此函數的殘留行為)。 如果我解碼字節,我會得到一個包含大量NUL字符的unicode字符串。

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

我的印象是尾隨零字節是UTF-8的一部分,並會自動刪除。

刪除零字節的正確方法是什么?

使用str.rstrip()刪除尾隨的NUL:

>>> 'hiya\0\0\0'.rstrip('\0')
'hiya'

rstripreplace只有在字符串用空值填充到緩沖區末尾時才有效。 實際上,緩沖區可能尚未初始化為null,因此您可能會獲得類似b'hiya\\0x\\0'

如果你斷然100%知道C代碼以空初始化緩沖區開始並且永遠不會重復使用它,那么你可能會發現rstrip更簡單,否則我會選擇稍微麻煩但更安全:

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

將第一個null視為終止符。

與分割/分區解決方案不同,這不會復制多個字符串,對於長字節數組可能更快。

data = b'hiya\0\0\0'
i = data.find(b'\x00')
if i == -1:
  return data
return data[:i]

也許你可以調用.replace('\\0', '')並清除它們?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM