6

我需要将此文本文件的第三列加载为十六进制字符串

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'

我也尝试了二进制模式和十六进制模式,但没有成功。

4

5 回答 5

7

你可以:

  1. 删除\x-es
  2. 在结果字符串上使用 .decode('hex')

代码:

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

注意反斜杠的适当解释。当字符串表示为 '\xf3' 时,意味着它是一个字节值为 0xF3 的单字节字符串。当它是 '\\xf3',这是您的输入时,它表示一个由 4 个字符组成的字符串:\xf3

于 2010-08-19T06:06:44.283 回答
7

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')

一些琐事

有趣的是,我在 Karmic Koala Ubuntu ( sys.maxunicode==1114111) 上安装了 Python 2.6.4,在 Gentoo ( ) 上安装了 Python 2.6.5 sys.maxunicode==65535;在 Ubuntu 上,unicode_escape-decode 结果是\uDBB8\uDC03,而在 Gentoo 上u'\U000fe003',它的长度都是正确的 2。除非它在 ​​2.6.4 和 2.6.5 之间固定,否则我对 2-byte-per-unicode-character Gentoo 版本报告印象深刻正确的字符。

于 2010-09-18T01:21:31.147 回答
5

如果您使用的是 Python2.6+,这里是使用 eval 的安全方法

>>> from ast import literal_eval
>>> item='\\xF3\\xBE\\x80\\x80'
>>> literal_eval("'%s'"%item)
'\xf3\xbe\x80\x80'
于 2010-08-19T08:30:26.397 回答
1

去掉 "\x" 作为 Eli 的答案后,你可以这样做:

int("F3BE8080",16)
于 2010-08-19T09:06:20.347 回答
0

如果您信任来源,则可以使用eval('"%s"' % data)

于 2010-08-19T07:13:19.423 回答