【问题标题】:Decode string with hex characters in python 2在python 2中用十六进制字符解码字符串
【发布时间】:2011-03-04 00:26:15
【问题描述】:

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

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

我该怎么做?

【问题讨论】:

  • 您是在源中定义 hex_string 还是来自外部源?

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


【解决方案1】:

尝试(Python 3.x):

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

来自here

【讨论】:

    【解决方案2】:

    假设 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'
    

    【讨论】:

    【解决方案3】:

    试试

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

    cp1254iso-8859-9 是土耳其语代码页,前者是 Windows 平台上的常用名称,但在 Python 中,两者都可以正常工作)

    【讨论】:

      【解决方案4】:

      首先,您需要从您拥有的编码字节中对其进行解码。这似乎是 ISO-8859-9 (latin-5),或者,如果您使用的是 Windows,可能是基于 latin-5 的 code page 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,则一个好的数据访问层可能会自动为您完成这项工作。

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2014-12-28
          • 2011-03-18
          • 2018-08-21
          • 2020-10-23
          • 1970-01-01
          • 2020-11-11
          • 1970-01-01
          • 1970-01-01
          • 2013-01-03
          相关资源
          最近更新 更多