首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python从struct.unpack()的输出中解码UTF-16

Python从struct.unpack()的输出中解码UTF-16
EN

Stack Overflow用户
提问于 2015-02-08 08:39:30
回答 2查看 3.6K关注 0票数 2

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

这是我想要解码的数据。

代码语言:javascript
复制
('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')

下面是代码:

代码语言:javascript
复制
s = bytes(struct.unpack('28c',fld_desc)).decode('utf-16')

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

代码语言:javascript
复制
⠧㈧Ⱐ❜砰〧Ⱐ✲✬‧屸〰✬‧㔧Ⱐ❜砰〧Ⱐ✰✬‧屸〰✬‧倧Ⱐ❜砰〧Ⱐ❩✬‧屸〰✬‧渧Ⱐ❜砰〧Ⱐ❏✬‧屸〰✬‧嘧Ⱐ❜砰〧Ⱐ❅✬‧屸〰✬‧洧Ⱐ❜砰〧Ⱐ❰✬‧屸〰✬‧琧Ⱐ❜砰〧Ⱐ❹✬‧屸〰✩

我哪里出错了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-08 08:44:17

如果您的fld_desc实际上只是字节字符串'2\x002\x005\x000\x00P\x00i\x00n\x00O\x00V\x00E\x00m\x00p\x00t\x00y\x00',而这是python 2,则只需执行以下操作

代码语言:javascript
复制
>>> fld_desc.decode('UTF-16-LE')
u'2250PinOVEmpty'

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

代码语言:javascript
复制
>>> struct.unpack(fld_desc)
('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')

提供给bytes (毕竟它是python 2中str的同义词),使其成为一个新的字符串。

代码语言:javascript
复制
"('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')"

其中解码的字符看起来主要是CJK字符和象形图的字符串。

“✨✲尧へ✰(8)Ⱗ✠硜〰Ⱗ✠✵尧へ✰〧Ⱗ✠硜〰Ⱗ✠❐尧へ✰椧Ⱗ✠硜〰Ⱗ✠❮尧へ✰伧Ⱗ✠硜〰Ⱗ✠❖尧へ✰䔧Ⱗ✠硜〰Ⱗ✠❭尧へ✰瀧Ⱗ✠硜〰Ⱗ✠❴尧へ✰礧Ⱗ✠硜〰⤧”

在小endian (UTF-16-LE),和

⠧(8)Ⱐ❜砰〧Ⱐ✲✬·屸〰✬·㔧Ⱐ❜砰〧Ⱐ✰✬·屸〰✬·倧Ⱐ❜砰〧Ⱐ❩✬·屸〰✬·渧Ⱐ❜砰〧Ⱐ❏✬·屸〰✬·嘧Ⱐ❜砰〧Ⱐ❅✬·屸〰✬·洧Ⱐ❜砰〧Ⱐ❰✬·屸〰✬·琧Ⱐ❜砰〧Ⱐ❹✬·屸〰✩

在大本营(UTF-16-BE)。

票数 4
EN

Stack Overflow用户

发布于 2015-02-08 08:40:25

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

代码语言:javascript
复制
>>> 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'
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28392105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档