【问题标题】:How to decode hex encoded Cyrillic string?如何解码十六进制编码的西里尔字符串?
【发布时间】:2021-10-28 12:36:52
【问题描述】:

我有一个十六进制编码的西里尔字母字符串“041E043F043B04300442”。

如何转换成文本字符串?

我试过这样:

codecs.decode('041E043F043B04300442', 'hex').decode('utf-16')
'Ḅ㼄㬄〄䈄'

但是我得到了错误的符号。 正如我从 Unicode 符号列表中看到的,第一个符号应该是西里尔符号:

U+041E  Cyrillic Capital Letter O

我做错了什么?

【问题讨论】:

    标签: python unicode hex decode


    【解决方案1】:

    我不得不使用另一个编解码器:

    codecs.decode('041E043F043B04300442', 'hex').decode('utf-16be')
    

    现在解码正常。

    【讨论】:

      【解决方案2】:

      utf-16 默认为机器的字节序,除非存在字节顺序标记(BOM,U+FEFF)。你的机器看起来是 little-endian,但数据是 big-endian:

      >>> bytes.fromhex("041E043F043B04300442").decode('utf-16')
      'Ḅ㼄㬄〄䈄'
      >>> bytes.fromhex("041E043F043B04300442").decode('utf-16le')
      'Ḅ㼄㬄〄䈄'
      >>> bytes.fromhex("041E043F043B04300442").decode('utf-16be')
      'Оплат'
      

      (英文)支付

      添加正确的 BOM 后,utf-16 可以工作:

      >>> bytes.fromhex("FEFF041E043F043B04300442").decode('utf-16')
      'Оплат'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-21
        • 2020-11-11
        • 2019-05-17
        • 1970-01-01
        • 2013-01-03
        • 2012-11-12
        • 1970-01-01
        • 2014-12-28
        相关资源
        最近更新 更多