返回结果乱码_JAVA封装CTP API中文乱码解决方案

目前上期技术官方提供的CTP API是C++版本,但在实际使用中不少客户的量化交易系统是Java写的,这就需要有一个JAVA封装CTP API的,可供JAVA直接使用的动态库。

SWIG是一个能将C/C++接口转换为其他语言的工具,目前可以支持Python,Java,R等语言,已有成熟的教程。在用swig生成JAVA版CTP API的过程中,最大的问题莫过于返回值中文乱码问题。

本文主要介绍封装时产生的两类乱码问题,一类是普通回报中的字符串乱码问题,另一类是结算单乱码问题。其中结算单乱码问题对其他编程语言亦有参考意义。

一、普通回报中文乱码

此类型常见的乱码主要存在于 CThostFtdcRspInfoField 结构体中的 ErrorMsg 字段,用于在接口调用存在错误时返回必要参考信息,除此之外,通过结构体 CThostFtdcInstrumentField 获取合约中文名称等信息出现乱码也是常见的乱码问题之一。

具体原因:

1. Java基于Unicode字符集,并有多个类库实现了Unicode标准,运行时内部字符串使用UTF-16,默认使用UTF-8序列化字符串。因此当JNI返回字符串时,应调用NewStringUTF方法(当输入为UTF-8时),或者调用NewString(当输入为UTF-16时)方法,最终生成可以在Java中返回的jstring。

2. CTP官方使用的是国标编码,也就是(GB18030>GBK&g

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值