Python中非拉丁UTF-8字符的十六进制代码字符串

时间:2018-07-25 07:42:23

标签: python bash pandas encoding utf-8

我有一个数据框,其中一列包含以开头的值

b'\xe0\xa4\x9d\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4...'

这是我运行df.head(10)

时数据框中的值的样子

但是当我使用其索引号打印此单元格时,我得到的值由这样的两个反斜杠分隔。

t = df['text'][461]

"b'\\xe0\\xa4\\xb8\\xe0\\xa5\\x8d\\xe0\\xa4\\xb5\\xe0\\xa4\\xb0\\xe0\\xa5\\x8d\\xe0\\xa4\\xa3\\xe0\\xa4\\xb0\\xe0\\xa5\\x87\\xe0\\xa4\\x96\\xe0\\xa4\\xbe ..."

双引号告诉我,我的pandas数据框将其作为字符串而不是字节对象。

当我在互联网上搜索时,我才知道这是包含十六进制代码的python字节对象。

我想将此列转换为非拉丁UTF-8字符。 我试图做以下事情。

  1. df['text'][461].decode()

在这种情况下,我会得到

错误

AttributeError: 'str' object has no attribute 'decode'

  1. print ("\xe0\xa4\xae\xe0\xa5\x88\xe0\xa4\x82")

当我从数据框中手动复制时,得到了

मà¥à¤

  1. bytes.fromhex('e0a4aee0a588e0a482').decode('utf-8') 在这种情况下,我必须手动删除前面代码中的所有\x,然后得到正确的印地语(非拉丁语)单词,即 'मैं'

我认为我需要做两件事。

  1. 确保将单元格读取为字节对象而不是字符串,以便正确解码。
  2. 将其解码为非拉丁utf-8

当我尝试使用bytes(df['text'][461], 'utf-8')将对象转换为字节对象时,它只接受原始的十六进制代码字符串,并向其添加b'以使其成为字节对象,此后什么也没有发生。我仍然留下相同的/ x对象。

如何将这些值转换为印地语(非拉丁utf-8)?

我现在无所适从。我是编码,解码和十六进制值的新手。

编辑1

使用bash shell,我能够从文件中删除所有多余的",并将我的专栏保存到其他文本文件中。在Bash上运行file file_name.txt时,我得到了ASCII Text作为文件类型。而且,当我使用iconvASCII to UTF-8更改格式时,我仍然得到相同的文件,没有任何错误。

鉴于iconv无法正常工作,如何将该ASCII文件转换为UTF-8?

编辑2

在Linux中使用ascii2uni命令,我得到了另一个文件,其序列类似于b'पà¥à¤°à¥ हॠशिवभà¤à¥à¤¤à¥à¤ à¤à¥ हर मनà¥à¤à¤¾à¤®à¤¨à¤¾' 当我在此上使用bytes.decode()时,出现以下错误。

SyntaxError: bytes can only contain ASCII literal characters.

反正我可以去印地语吗?

0 个答案:

没有答案