FAQ > 金融建模 > 第三方交互 > Python

Q:与python3交互中字符串转gbk的问题    

简述
针对TS与Python交互,TS默认为gbk格式,批量进行转码使中文等字符串正常显示
  • 通过各类语言对json串的支持,可更便捷地解决该类问题。
    具体可参考:FAQ:Q:在天软将结果转换成Json串返回到python中解决转码引起的效率低下问题

    也可通过下列方式进行处理:
    说明:
    由于在python3里,所有原始字符串都是以unicode编码的,而天软是gbk编码,所以交互时字符串不能正常转换,这时,需要在python中实现转码。单个字符串的实现比较简单,可用b'abc'.decode('gbk')即可解决,而对于数组中的字符串的转换,则需要批量处理,所以,这里我们提供了一个python函数实现批量转码的案例给用户参考。
    案例实用范围:支持一维、二维数组转码
    批量转码的Python实现代码如下:

    def Batch_Encoding(items):
      ret = [] 
      for i in range(len(items)):
        item = items[i]
        if type(item).__name__=='dict':
          K = list(item.keys())
          V = list(item.values())
          K1 = []
          V1 = []
          for j in range(len(K)):
            try:
              K1.append(K[j].decode('gbk'))
            except:
              K1.append(K[j])
            try:
              V1.append(V[j].decode('gbk'))
            except:
              V1.append(V[j])
          ret.append(dict(zip(K1,V1)))
        else:
          try:
            ret.append(item.decode('gbk'))
          except:
            ret.append(item)
      return ret

    调用案例:

    #批量解码范例

    import sys
    sys.path.append('C:\Program Files\Tinysoft\Analyse.NET')
    import TSLPy3
    from batch_encoding import Batch_Encoding

    #字符串转码案例
    data = TSLPy3.RemoteExecute("return '上证指数';",{})
    print(data[1].decode('gbk'))
    print('\n'+'-'*20+'\n')

    #二维测试案例
    items = (TSLPy3.RemoteExecute("return nday(4,'t',datetostr(sp_time()), 'close',close(),'名称',stockname(DefaultStockID()));",{"StockID":"SH000001",'CurrentDate':TSLPy3.EncodeDate(2019,2,26)}))[1]
    print(Batch_Encoding(items))

    print('\n'+'-'*20+'\n')

    #一维测试案例
    items = (TSLPy3.RemoteExecute("return array('上证指数','万科A');",{}))[1]
    print(Batch_Encoding(items))

    以上两个文件附件:
    附件:batch_encoding.py
    附件:example_decode.py