簡體   English   中英

如何將 B 字符串轉換為字節?

[英]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 文字(例如intlist等),因此如果您想強制您只以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.

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