簡體   English   中英

如何將字節字符串轉換為具有正確轉義的字符?

[英]How to convert byte string to character with correct escaping?

我無法弄清楚,為什么解碼失敗,如果字節字符串以a,b,c,d,e或f的十六進制形式(而不是數字)開頭,則總是有兩個反斜杠而不是一個。

>>> bstr = b'\xfb'
>>> bstr.decode('utf8', 'backslashreplace')
'\\xfb'

我想要的是“ \\ xfb”。

但,

>>> bstr = b'\x1f'
>>> bstr.decode('utf8', 'backslashreplace')
'\x1f'

可以正常工作。 你知道出什么事了嗎

b'\\xfb'是一個包含單個字節的字節b'\\xfb' 該字節具有十六進制值FB或十進制251。

'\\xfb'是包含單個Unicode代碼點的字符串。 該代碼點是U + 00FB帶斜線的拉丁文小寫字母U或û

b'\\xfb' 不是的UTF-8編碼'\\xfb' '\\xfb'的UTF-8編碼為b'\\xc3\\xbb'

>>> '\xfb'.encode('utf-8')
b'\xc3\xbb'

實際上, b'\\xfb'根本不是任何東西的UTF-8編碼,並且嘗試將其解碼為UTF-8是錯誤的。 'backslashreplace'指定了一種處理該錯誤的方法,其中FB字節由字符序列backslash-xfb代替。

盡管可以做將b'\\xfb'轉換為'\\xfb'事情,但是該轉換與UTF-8無關,而在沒有明確要求的情況下應用該轉換只會引起更多問題。 您需要弄清楚您的程序實際上需要做什么。 最有可能的是,正確的前進方向不涉及任何b'\\xfb''\\xfb'轉換。 我們無法告訴您您需要做什么,因為我們缺少太多背景信息。

暫無
暫無

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

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