python - 如何使用无法解码为 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
如何将数据转换为字符串并进一步处理
提前致谢
解决方案
您的数据不是 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 的更多信息:
推荐阅读
- git - 使 git `replace` 提交永久(或类似)
- flutter - AWS Cognito 用户池
- autocomplete - Google 地方信息自动填充中的特殊字符
- java - 在外部 TOMCAT 中运行的 Spring Boot 项目战争失败
- google-cloud-endpoints-v2 - 通过 Cloud Endpoints 基于 API 密钥限制对云功能的访问的问题
- javascript - React:多个异步状态更新
- elixir - Ecto 断言#Ecto.Association.NotLoaded
- ios - 如何使用 PHPickerViewController 仅显示有限的照片?
- verilog - 制作 alu 时出现 Verilog 错误:不是常量
- react-native - 带有 JSON 对象数组的 useState,未定义不是对象