簡體   English   中英

如何將包含字節字符串的字符串轉換為字節字符串

[英]How to convert a string containing a byte string to a byte string

如何將包含字節字符串的文字表示的字符串轉換為字節字符串?

這可能看起來很奇怪,但對於我用於某種類型異常的庫,我需要異常的屬性之一,這給了我需要的值,但它是字符串中的字節字符串。

它是"value=b'\\xbbOFa\\x14\\xdb{\\xf5\\x1b~H\\xba\\x96\\xdaec'" ,我可以通過等號拆分然后使用eval ,例如

>>> eval("value=b'\\xbbOFa\\x14\\xdb{\\xf5\\x1b~H\\xba\\x96\\xdaec'".split("=")[1])
     
b'\xbbOFa\x14\xdb{\xf5\x1b~H\xba\x96\xdaec' 

這行得通,但我們都知道eval可能非常非常糟糕。 那么,是否有使用eval的替代方法?

有一個unicode-escape編解碼器,它將包含像\x..\u.... .. 這樣的文字序列的字節轉換為字符串中的等效字符。 字符串的其余部分使用latin1編碼進行轉換,該編碼僅轉換所有字節。

因此,您使用latin1將字符串轉換為原始字節,然后使用unicode-escape轉換回字符串,最后再次使用latin1轉換回字節:

>>> s = '\\xbbOFa\\x14\\xdb{\\xf5\\x1b~H\\xba\\x96\\xdaec'
>>> s.encode('latin1').decode('unicode-escape').encode('latin1')
b'\xbbOFa\x14\xdb{\xf5\x1b~H\xba\x96\xdaec'

使用正則表達式或您展示的更多手動解析非常容易擺脫字符串周圍的混亂。 例如:

>>> x = "value=b'\\xbbOFa\\x14\\xdb{\\xf5\\x1b~H\\xba\\x96\\xdaec'"
>>> s = re.fullmatch('[^\'"]+b([\'"])(.*)\\1[^\'"]*', x).group(2)
>>> s
'\\xbbOFa\\x14\\xdb{\\xf5\\x1b~H\\xba\\x96\\xdaec'

或者

>>> s = x.split('=')[1].lstrip('b').strip("'")
>>> s
'\\xbbOFa\\x14\\xdb{\\xf5\\x1b~H\\xba\\x96\\xdaec'

暫無
暫無

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

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