簡體   English   中英

Python - 二進制轉義序列的字符串

[英]Python - string of binary escape sequences as literal

我需要打印出一串二進制轉義序列,例如\\x05\\x03\\x87 ,就像它們出現的那樣。 當我嘗試打印它們時,Python返回一串奇怪的非ASCII字符。 如何將它們打印為字符串文字?

repr

>>> a='\x05\x03\x87'
>>> print a
?
>>> print repr(a)
'\x05\x03\x87'

編輯

Sven指出OP可能希望每個字符都以十六進制轉儲,甚至是可打印的,在這種情況下,我能想到的最佳解決方案是:

>>> print ''.join(map(lambda c:'\\x%02x'%c, map(ord, a)))
\x05\x03\x87

其他編輯

四年后,我發現這可能既快又可讀:

>>> print ''.join(map(lambda c:'\\x%02x'% ord(c), a))

甚至

>>> print ''.join([ '\\x%02x'% ord(c) for c in a ])

使用string-escape編碼

>>> print '\x05\x03\x87'.encode('string-escape')
\x05\x03\x87

來自docs:

在Python源代碼中生成一個適合作為字符串文字的字符串

這基本上會給你與repr()相同的東西,沒有那些討厭的引號。

請注意,就像Malvolio的回答一樣,這假設您只想要非可打印字符的轉義版本,如果這不是您想要的,請澄清。

您可以派生自己的str子類,其行為和打印方式如您所願,但幾乎可以在常規字符串的任何位置使用,並具有所有相同的內置方法。

正如您所看到的,該示例打印了它包含的所有字符的十六進制值,無論它們是否正常打印 - 當然,如果您願意,可以采用不同的方式。

class HexStr(str):
    def __repr__(self):
        return "'" + ''.join('\\x{:02x}'.format(ord(ch)) for ch in self) + "'"
    __str__ = __repr__

a = HexStr('abc\x05\x03\x87')
print a
print str(a)
print repr(a)

輸出:

'\x61\x62\x63\x05\x03\x87'
'\x61\x62\x63\x05\x03\x87'
'\x61\x62\x63\x05\x03\x87'

暫無
暫無

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

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