首页 > 解决方案 > 如何使用无法解码为 utf-8 的 unicode 处理网络消息

问题描述

我通过套接字连接收到以下字节消息,我想转换为字符串并做进一步处理我正在使用 python3.7

下面是我到目前为止尝试过的代码

import  codecs

a = b'0400F224648188E0801200000040000000001941678904000010237890000000000000222220418151856038556051259950760020806002468060046010403319     HSBCBSB8001101234567890MC   100  WITH ORDERIN   FO           AU009006Q\x00\x00\x00\x83\x00007\xa0\x00\x00\x00\x00%\x02010003855604181518562468000000000460100000'

b= codecs.decode(a, 'utf-8')

print(b)

我收到如下错误

> UnicodeDecodeError: 'utf-8' codec can't decode byte 0x83 in position    > 208: invalid start byte

如何将数据转换为字符串并进一步处理

提前致谢

标签: pythonpython-3.xcharacter-encoding

解决方案


您的数据不是 utf-8 编码的。您可以使用 BeautifulSoup 解码未知编码:

from BeautifulSoup import BeautifulSoup

soup = BeautifulSoup(b'0400F224648188E0801200000040000000001941678904000010237890000000000000222220418151856038556051259950760020806002468060046010403319     HSBCBSB8001101234567890MC   100  WITH ORDERIN   FO           AU009006Q\x00\x00\x00\x83\x00007\xa0\x00\x00\x00\x00%\x02010003855604181518562468000000000460100000'
)
print(soup.contents[0])

print(soup.originalEncoding)

要得到

0400F224648188E0801200000040000 ... # etc

windows-1252

您也可以单独使用 bs4-detector: UnicodeDammit并为其提供建议首先尝试哪些编码/不要尝试对其进行微调。

关于 SO 的更多信息:


推荐阅读