簡體   English   中英

如何刪除那些“\x00\x00”

[英]How to remove those "\x00\x00"

如何刪除字符串中的“\x00\x00”? 我有很多這樣的字符串(示例如下所示)。 我可以使用re.sub來替換那些“\x00”。 但我想知道是否有更好的方法來做到這一點? Unicode、字節和字符串之間的轉換總是令人困惑。

'Hello\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'.

使用rstrip

>>> text = 'Hello\x00\x00\x00\x00'
>>> text.rstrip('\x00')
'Hello'

它刪除字符串末尾的所有\\x00字符。

>>> a = 'Hello\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 
>>> a.replace('\x00','')
'Hello'

我認為更通用的解決方案是使用:

cleanstring = nullterminatedstring.split('\x00',1)[0]

這將使用\\x00作為分隔符1split字符串。 split(...)返回一個 2 元素列表:空值之前的所有內容以及空值之后的所有內容(它刪除了分隔符)。 附加[0]僅返回第一個空 (\\x00) 字符之前的字符串部分,我相信這就是您要查找的內容。

某些語言(特別是 C 類語言)的約定是單個空字符標記字符串的結尾。 例如,您還應該期望看到如下所示的字符串:

'Hello\x00dpiecesofsomeoldstring\x00\x00\x00'

此處提供的答案將處理這種情況以及其他示例。

基於提供的答案,我建議 strip() 在清理數據包方面比 rstrip() 更通用,因為 strip() 從提供的字符串的開頭和結尾刪除字符,而 rstrip() 只是刪除字符從字符串的末尾。

但是,默認情況下,strip() 不會將 NUL 字符視為空格,因此您需要明確指定。 這可能會讓您措手不及,因為 print() 當然不會顯示 NUL 字符。 我使用的解決方案是使用“ .strip().strip('\\x00') ”清理字符串:

>>> arbBytesFromSocket = b'\x00\x00\x00\x00hello\x00\x00\x00\x00'
>>> arbBytesAsString = arbBytesFromSocket.decode('ascii')
>>> print(arbBytesAsString)
hello
>>> str(arbBytesAsString)
'\x00\x00\x00\x00hello\x00\x00\x00\x00'
>>> arbBytesAsString = arbBytesFromSocket.decode('ascii').strip().strip('\x00')
>>> str(arbBytesAsString)
'hello'
>>>

這為您提供了所需的字符串/字節數組,每一端都沒有 NUL 字符,並且還保留了“數據包”中的任何 NUL 字符,這對於接收到的可能包含有效 NUL 字符的字節數據(例如 C-類型結構)。 注意。 在這種情況下,數據包必須“包裝”,即由非 NUL 字符(前綴和后綴)包圍,以允許正確檢測,從而僅去除不需要的 NUL 字符。

我嘗試了striprstrip ,但它們不起作用,但是這個起作用了; 使用split然后join結果list

if '\x00' in name:
    name=' '.join(name.split('\x00'))

我在 Excel 中遇到了這個問題副本列表。 過程是:

  • 在 Excel 中復制發送給我的 ID 號列表
  • 運行一組 pyton 代碼:
    • 將剪貼板作為文本讀取
    • txt.Split('\\n') 給出一個列表
    • 處理列表中的每個元素(根據需要更新生產系統)

問題是在讀取剪貼板時間歇性地在文本末尾返回多個 '\\x00'。

已經從使用win32clipboard改為使用pyperclip讀取剪貼板,似乎解決了問題。

上面的尼爾寫道,'......你可能想先考慮一下為什么你首先擁有它們。 對於我自己對此錯誤代碼的問題,這導致了我的問題。 我正在讀取的保存文件是 unicode 格式的。 一旦我將文件重新保存為純 ASCII 文本,問題就解決了

暫無
暫無

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

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