Преобразование шестнадцатеричного представления в фактические байты в Python - PullRequest
7 голосов
/ 19 августа 2010

мне нужно загрузить третий столбец этого текстового файла в виде шестнадцатеричной строки

http://www.netmite.com/android/mydroid/1.6/external/skia/emoji/gmojiraw.txt

>>> open('gmojiraw.txt').read().split('\n')[0].split('\t')[2]
'\\xF3\\xBE\\x80\\x80'

как мне открыть файл, чтобы я мог получить третий столбецкак шестнадцатеричная строка:

'\xF3\xBE\x80\x80'

Я также пробовал двоичный режим и шестнадцатеричный режим, но безуспешно.

Ответы [ 5 ]

7 голосов
/ 18 сентября 2010

Quick'n'dirty ответ

your_string.decode('string_escape')

>>> a='\\xF3\\xBE\\x80\\x80'
>>> a.decode('string_escape')
'\xf3\xbe\x80\x80'
>>> len(_)
4

Информация о бонусе

>>> u='\uDBB8\uDC03'
>>> u.decode('unicode_escape')

Некоторые мелочи

Что интересно, у меня есть Python 2.6.4 на KarmicKoala Ubuntu (sys.maxunicode==1114111) и Python 2.6.5 для Gentoo (sys.maxunicode==65535);в Ubuntu результат unicode_escape-decode равен \uDBB8\uDC03, а в Gentoo - u'\U000fe003', оба значения правильной длины 2. Если это не зафиксировано между 2.6.4 и 2.6.5, я впечатлен 2-байтовымUnicode-символьная версия Gentoo сообщает о правильном символе.

7 голосов
/ 19 августа 2010

Вы можете:

  1. Удалить \x -es
  2. Использовать .decode ('hex') в результирующей строке

Код:

>>> '\\xF3\\xBE\\x80\\x80'.replace('\\x', '').decode('hex')
'\xf3\xbe\x80\x80'

Обратите внимание на соответствующую интерпретацию обратных слешей. Когда строковое представление '\ xf3', это означает, что это однобайтовая строка со значением байта 0xF3. Когда вы вводите '\\ xf3', это означает, что строка состоит из 4 символов: \, x, f и 3

5 голосов
/ 19 августа 2010

Если вы используете Python2.6 +, вот безопасный способ использовать eval

>>> from ast import literal_eval
>>> item='\\xF3\\xBE\\x80\\x80'
>>> literal_eval("'%s'"%item)
'\xf3\xbe\x80\x80'
0 голосов
/ 19 августа 2010

После удаления "\ x" в ответе Илии вы можете просто сделать:

int("F3BE8080",16)
0 голосов
/ 19 августа 2010

Если вы доверяете источнику, вы можете использовать eval('"%s"' % data)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...