Python 转换十六进制文件并提取/显示属于某种语言的字符

Python 转换十六进制文件并提取/显示属于某种语言的字符,python,unicode,Python,Unicode,我正在解析包含ascii字符的文件,但文件中的十六进制格式(如A)表示为65。 因此,文件内容如下所示: 60 42 00 64 62 D6 52 20 4E 65 75 2D 55 6C 6D 20 2F 20 45 76 C4 我试图从属于语言集的文件中提取有用的信息。 我不知道文件是如何保存的(如果是utf-8或utf-16) 我正在尝试编写一个python程序,我的第一种方法是将整行代码组合起来,使其看起来像这样 fd = open('file.txt', 'r') x = fd.re

我正在解析包含ascii字符的文件,但文件中的十六进制格式(如A)表示为65。 因此,文件内容如下所示:

60 42 00 64 62 D6 52 20 4E 65 75 2D 55 6C 6D 20 2F 20 45 76 C4
我试图从属于语言集的文件中提取有用的信息。 我不知道文件是如何保存的(如果是utf-8或utf-16) 我正在尝试编写一个python程序,我的第一种方法是将整行代码组合起来,使其看起来像这样

fd = open('file.txt', 'r')
x = fd.readline()
x_split = x.split(' ')    
x_split = ', '.join(x_split)
x_split = x_split.replace(', ', '\\x')
x_split = u'\\x'+ x_split   
# here the line should look like '\x60\x42\x00\x64\x62\xD6\x52\x20\x4E\x65\x75\x2D\x55\x6C\x6D\x20\x2F\x20\x45\x76\xC4'
print x_split               
# here i assumed that the above hexadecimal numbers would be shown as alphabets.

我假设它应该返回字符,如Abcd等,但打印会再次打印整行(以数字形式)文件中的内容。

您没有生成可以解码为字符串的字节;你只是在制作一个字符串,在字母和数字之前有很多
\
x
字符

>>> x = "60 42 00 64 62 D6 52 20 4E 65 75 2D 55 6C 6D 20 2F 20 45 76 C4"
>>> x_split = x.split(' ')    
>>> x_split = ', '.join(x_split)
>>> x_split = x_split.replace(', ', '\\x')
>>> x_split = u'\\x'+ x_split   
>>> x_split
u'\\x60\\x42\\x00\\x64\\x62\\xD6\\x52\\x20\\x4E\\x65\\x75\\x2D\\x55\\x6C\\x6D\\x20\\x2F\\x20\\x45\\x76\\xC4'
同样,这只是一个包含一堆字符的字符串。其中一些恰好与十六进制中使用的相同,这基本上无关紧要

如果您想要一个字节数组,您可以执行以下操作

>>> bb = bytearray(int(b, 16) for b in x.split())
>>> bb
bytearray(b'`B\x00db\xd6R Neu-Ulm / Ev\xc4')
如果你知道编码,你可以从中得到一些东西。例如,这里有一个随机猜测:

>>> bb.decode("iso-8859-2")
u'`B\x00db\xd6R Neu-Ulm / Ev\xc4'
>>> print bb.decode("iso-8859-2")
`BdbÖR Neu-Ulm / EvÄ

但对编码的不同假设将给出不同的结果。(一个粗略的类比:除非你知道“五彩纸屑”这个词是英语还是意大利语,否则你就不知道它是指在庆祝活动中扔来扔去的小纸片还是甜杏仁。)

真的是罗伯特·哈维吗?不清楚的?这对我来说似乎是完全清楚的-如何将十六进制数列表转换为字节?另外,如果不考虑语言的引用,可能会少一些混乱。问题似乎有两个部分,您应该一次解决一个。甚至可能是iso-8859-2…问题是,当我打印行='\x60\x42\x00\x64\x62\xD6\x52\x20\x4E\x65\x75\x2D\x55\x6C\x6D\x20\x2F\x20\x45\x76\xC4'时,我成功地在输出“B dbÖR Neu Ulm/Ev”上看到以下内容。但只要我写了一个程序生成同一行,那么打印就不会返回任何有用的东西。