Skip to content

获取结算单明细时GBK解码错误 #62

Closed
@ChnMig

Description

@ChnMig

你好, 我在测试使用 ctpwrapper 的 获取结算单明细回调 OnRspQrySettlementInfo 时, 发现回调的多条数据中, 有一些报错

Traceback (most recent call last):
  File "ctpwrapper/TraderApi.pyx", line 1402, in ctpwrapper.TraderApi.TraderSpi_OnRspQrySettlementInfo
  File "/root/python/futures/trader_main.py", line 149, in OnRspQrySettlementInfo
    print(pSettlementInfo.Content)
  File "/root/python/futures/.venv/lib/python3.9/site-packages/ctpwrapper/base.py", line 28, in __getattribute__
    return value.decode("gbk")
UnicodeDecodeError: 'gbk' codec can't decode byte 0xd2 in position 499: incomplete multibyte sequence

这是因为内置函数

    def __getattribute__(self, item):
        value = super().__getattribute__(item)
        if isinstance(value, bytes):
            return value.decode("gbk")
        else:
            return value

在获取到bytes时使用gbk解码, 解码出现了问题, 我修改了源代码为

    def __getattribute__(self, item):
        value = super().__getattribute__(item)
        if isinstance(value, bytes):
            return value.decode("gbk", errors="ignore")
        else:
            return value

设置decode时忽略解析错误的字符来规避错误, 在测试过程中也没有发现数据丢失或错误的情况, 同时也保证了程序正常运行
你是否能将其修改发布? 或者说有更好的解决办法? 这是一个非常好的模块, 给予了我很大帮助, 谢谢!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions