【问题标题】:A string that represents encoded characters表示编码字符的字符串
【发布时间】:2015-01-01 17:08:31
【问题描述】:

我使用 python 2.7 并且我有以下字符串:mystr = '\xde\x05\xd7\x05\xe9\x05\xd1\x05' 我想从中获取真正的 unicode 字符串:myuni = u'\u05de\u05d7\u05e9\u05d1'。 编码为“cp1255”。

我怎样才能完成这项工作?

谢谢!

【问题讨论】:

  • 向我们展示你到目前为止所做的事情..
  • 那不是CP1255编码的数据。鉴于您的预期输出,您会期望 '\xee\xe7\xf9\xe1' 代替。您使用的是 UTF-16。
  • @qqvc 但它根本不起作用。例如: mystr.decode("cp1255") --> *** UnicodeDecodeError: 'charmap' codec can't decode byte 0xde in position 0: character maps to
  • @MartijnPieters 哇,原来如此! mystr.decode("utf16") 返回了我需要的!谢谢!

标签: python python-2.7 encoding decode


【解决方案1】:

您没有 CP1255 数据。您使用的是 UTF-16(小端)数据:

>>> mystr = '\xde\x05\xd7\x05\xe9\x05\xd1\x05' 
>>> mystr.decode('utf-16-le')
u'\u05de\u05d7\u05e9\u05d1'

CP1255 长这样:

>>> u'\u05de\u05d7\u05e9\u05d1'.encode('cp1255')
'\xee\xe7\xf9\xe1'

【讨论】:

  • 谢谢!当我执行 mystr.decode('utf-16') 时,它也可以工作,那是怎么回事?
  • @EllaShar:那么你的系统默认是 little-endian。它在大端系统上会失败。一个完整的字符串会在开头包含一个 BOM(字节顺序标记)来指示要使用的字节顺序。
猜你喜欢
  • 2013-12-29
  • 1970-01-01
  • 2013-06-17
  • 1970-01-01
  • 1970-01-01
  • 2015-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多