从的输出对UTF16进行Python解码解包结构()

2024-10-02 02:32:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我不知道我在这件事上哪里出错了。在

这是我要解码的数据。在

('2','\x00','2','\x00','5','\x00','0','\x00',
 'P','\x00','i','\x00','n','\x00','O','\x00','V','\x00',
 'E','\x00','m','\x00','p','\x00','t','\x00','y','\x00')

代码如下:

^{pr2}$

我没有得到字符串'2250PinOVEmpty',而是得到了这个。。。非常奇怪的符号串:

⠧㈧Ⱐ❜砰〧Ⱐ✲✬‧屸〰✬‧㔧Ⱐ❜砰〧Ⱐ✰✬‧屸〰✬‧倧Ⱐ❜砰〧Ⱐ❩✬‧屸〰✬‧渧Ⱐ❜砰〧Ⱐ❏✬‧屸〰✬‧嘧Ⱐ❜砰〧Ⱐ❅✬‧屸〰✬‧洧Ⱐ❜砰〧Ⱐ❰✬‧屸〰✬‧琧Ⱐ❜砰〧Ⱐ❹✬‧屸〰✩

我哪里出错了?在


Tags: 数据字符串代码解码x00pr2符号串
2条回答

如果您的fld_desc确实是字节字符串'2\x002\x005\x000\x00P\x00i\x00n\x00O\x00V\x00E\x00m\x00p\x00t\x00y\x00',而这是python2,那么您只需要这样做

>>> fld_desc.decode('UTF-16-LE')
u'2250PinOVEmpty'

你错的地方是你根本不需要在这里使用struct.unpack。如果您这样做,那么您必须注意struct.unpack返回一个字符元组:

^{pr2}$

它被馈送到bytes(在python2中它毕竟是str的同义词),使其成为一个新的字符串

"('2', '\\x00', '2', '\\x00', '5', '\\x00', '0', '\\x00', 'P', '\\x00', 'i', '\\x00', 'n', '\\x00', 'O', '\\x00', 'V', '\\x00', 'E', '\\x00', 'm', '\\x00', 'p', '\\x00', 't', '\\x00', 'y', '\\x00')"

解码出来的看起来像是中日韩字符和象形图的字符串

"✨✲尧へ✰㈧Ⱗ✠硜〰Ⱗ✠✵尧へ✰〧Ⱗ✠硜〰Ⱗ✠❐尧へ✰椧Ⱗ✠硜〰Ⱗ✠❮尧へ✰伧Ⱗ✠硜〰Ⱗ✠❖尧へ✰䔧Ⱗ✠硜〰Ⱗ✠❭尧へ✰瀧Ⱗ✠硜〰Ⱗ✠❴尧へ✰礧Ⱗ✠硜〰⤧"

在little endian(UTF-16-LE)中,以及

"⠧㈧Ⱐ❜砰〧Ⱐ✲✬‧屸〰✬‧㔧Ⱐ❜砰〧Ⱐ✰✬‧屸〰✬‧倧Ⱐ❜砰〧Ⱐ❩✬‧屸〰✬‧渧Ⱐ❜砰〧Ⱐ❏✬‧屸〰✬‧嘧Ⱐ❜砰〧Ⱐ❅✬‧屸〰✬‧洧Ⱐ❜砰〧Ⱐ❰✬‧屸〰✬‧琧Ⱐ❜砰〧Ⱐ❹✬‧屸〰✩"

在big endian(UTF-16-BE)中。在

加入这些字符,然后解码:

>>> data = ('2','\x00','2','\x00','5','\x00','0','\x00',
...         'P','\x00','i','\x00','n','\x00','O','\x00','V','\x00',
...         'E','\x00','m','\x00','p','\x00','t','\x00','y','\x00')
>>> ''.join(data).decode('utf-16')
u'2250PinOVEmpty'

相关问题 更多 >

    热门问题