在python 2中解码带有十六进制字符的字符串

时间:2010-06-15 14:02:31

标签: python utf-8 hex python-2.x

我有一个十六进制字符串,我想将其转换为utf8以插入mysql。 (我的数据库是utf8)

hex_string = 'kitap ara\xfet\xfdrmas\xfd'
...
result = 'kitap araştırması'

我该怎么做?

5 个答案:

答案 0 :(得分:4)

假设Python 2.6,

>>> print('kitap ara\xfet\xfdrmas\xfd'.decode('iso-8859-9'))
kitap araştırması
>>> 'kitap ara\xfet\xfdrmas\xfd'.decode('iso-8859-9').encode('utf-8')
'kitap ara\xc5\x9ft\xc4\xb1rmas\xc4\xb1'

答案 1 :(得分:3)

尝试(Python 3.x):

import codecs
codecs.decode("707974686f6e2d666f72756d2e696f", "hex").decode('utf-8')

来自here

答案 2 :(得分:1)

尝试

hex_string.decode("cp1254").encode("utf-8")

cp1254iso-8859-9是土耳其语代码页,前者是Windows平台上的常用名称,但在Python中,两者都同样有效)

答案 3 :(得分:1)

首先,您需要从您拥有的编码字节中解码它。这似乎是ISO-8859-9(拉丁语-5),或者,如果您使用的是Windows,可能是code page 1254,它基于拉丁语-5。

>>> 'kitap ara\xfet\xfdrmas\xfd'.decode('cp1254')
u'kitap ara\u015ft\u0131rmas\u0131' # u'kitap araştırması'

如果 使用Windows,那么根据您获取这些字节的位置,可能更适合将其解码为mbcs,这会转换为.py到'本地系统使用的任何代码页'。如果字符串只是放在u'kitap araştırması'文件中,那么最好只在源代码中编写-*- coding并设置>>> u'kitap ara\u015ft\u0131rmas\u0131'.encode('utf-8') 'kitap ara\xc5\x9ft\xc4\xb1rmas\xc4\xb1' 声明以指示Python对其进行解码。请参阅PEP 263

关于如何将unicode字符串编码为数据库的UTF-8,如果你愿意,可以手动完成:

COLLATION

但是如果你有数据进入的{{1}}表,那么一个好的数据访问层很可能会自动为你做这件事。

答案 4 :(得分:0)

String literals解释了如何在Python源代码中使用UTF8字符串。