[英]How do I convert a B string to bytes?
bstr = "b'\\xe4\\xb8\\x96\\xe7\\x95\\x8c'"
bbytes = b'\\xe4\\xb8\\x96\\xe7\\x95\\x8c'
我想將bstr
轉換為bbytes
,我該怎么做?
您可以使用ast.literal_eval
( 此處的文檔)function 將此字符串評估為 python 文字。
import ast
bstr = "b'\\xe4\\xb8\\x96\\xe7\\x95\\x8c'"
bbytes = ast.literal_eval(bstr)
print(bbytes) # Outputs: b'\xe4\xb8\x96\xe7\x95\x8c'
這個 function 應該可以安全地用於用戶輸入(與eval
不同),盡管您可能應該強制執行長度限制以解決有關使用長/復雜輸入導致解釋器崩潰的警告。
請注意,這還將正確解析其他有效的 python 文字(例如int
, list
等),因此如果您想強制您只以bytes
結尾,您應該檢查一下,例如
if not isinstance(bbytes, bytes):
raise ValueError("Input must be a bytes string")
希望您可以稍微更改輸入,我將輸入更改為轉義bstr
,因此不會立即評估特殊字符。
如果您將此字符串作為用戶輸入,例如來自input
或讀取文件,則應該已經是這種情況。
如果您沒有正確轉義的輸入,則會出現異常:
>>> bstr = "b'\xe4\xb8\x96\xe7\x95\x8c'"
>>> ast.literal_eval(bstr)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.6/ast.py", line 48, in literal_eval
node_or_string = parse(node_or_string, mode='eval')
File "/usr/lib/python3.6/ast.py", line 35, in parse
return compile(source, filename, mode, PyCF_ONLY_AST)
File "<unknown>", line 1
SyntaxError: bytes can only contain ASCII literal characters.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.