5

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

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

我怎样才能做到这一点?

4

5 回答 5

6

尝试(Python 3.x):

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

这里

于 2018-04-24T07:02:29.190 回答
5

假设 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'
于 2010-06-15T14:10:34.693 回答
1

尝试

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

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

于 2010-06-15T14:12:39.200 回答
1

首先,您需要从您拥有的编码字节中对其进行解码。这似乎是 ISO-8859-9 (latin-5),或者,如果您使用的是 Windows,可能是基于 latin-5 的代码页 1254 。

>>> '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声明以指示 Python 对其进行解码。见PEP 263

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

>>> u'kitap ara\u015ft\u0131rmas\u0131'.encode('utf-8')
'kitap ara\xc5\x9ft\xc4\xb1rmas\xc4\xb1'

但是一个好的数据访问层很可能会自动为你做这件事,如果你有COLLATION数据进入正确的表。

于 2010-06-15T14:17:28.580 回答
0

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

于 2010-06-15T14:10:50.357 回答