How to convert hex string “\\x89PNG” to plain text

2019-06-05 00:02发布

问题:

I have a string "\x89PNG" which I want to convert to plain text.

I referred http://love-python.blogspot.in/2008/05/convert-hext-to-ascii-string-in-python.html But I found it a little complicated. Can this be done in a simpler way?

回答1:

\x89PNG is a plain text. Just try to print it:

>>> s = '\x89PNG'
>>> print s
┴PNG

The recipe in the link does nothing:

>>> hex_string = '\x70f=l\x26hl=en\x26geocode=\x26q\x3c'
>>> ascii_string = reformat_content(hex_string)
>>> hex_string == ascii_string
True

The real hex<->plaintext encoding\decoding is a piece of cake:

>>> s.encode('hex')
'89504e47'
>>> '89504e47'.decode('hex')
'\x89PNG'

However, you may have problems with strings like '\x70f=l\x26hl=en\x26geocode=\x26q\x3c', where '\' and 'x' are separate characters:

>>> s = '\\x70f=l\\x26hl=en\\x26geocode=\\x26q\\x3c'
>>> print s
\x70f=l\x26hl=en\x26geocode=\x26q\x3c

In this case string_escape encoding is really helpful:

>>> print s.decode('string_escape')
pf=l&hl=en&geocode=&q<

More about encodings - http://docs.python.org/library/codecs.html#standard-encodings



标签: python hex ascii