C++调用 python的方法就不说 网上不缺的就是这帖子
如 :
http://www.cnblogs.com/allensun/archive/2011/02/04/1949090.html
http://www.jcwcn.com/article-30546-1.html
然而并都没什么卵用,没有确切的指出我们今天的这个问题该怎么解决。
问题:c++ 调用 python 函数中文返回值乱码
也是神奇了 我把一段utf-8 编码的字符传回c++ 程序 ,打印出来是乱码,而且这种乱码的原因是 把utf-8 编码的字符 解码成ascii码了 。so 我就把字符串各种转码,都是乱码的 。
解决:
在python 代码中 先把字符串 编码成 gbk 编码的,然后在传回c++ 程序 就不会乱码了 。我有句妈卖批不知当讲不当讲,这和ascii 乱码看起来没有关系啊啊。
我用的python 2.7 编码问题真心坑
>>>>>>>>>>>>>>>>>>>>>>>>>>>>
python 转码方法
Python 里面的编码和解码也就是 unicode 和 str 这两种形式的相互转化。编码是 unicode -> str,相反的,解码就 是 str -> unicode。
——————————————————————————
# -*- coding: utf-8 -*- 文件开头这句 指示了pytnon 代码的编码方式
————————————————————————————
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
因为解码是python自动进行的,我们没有指明解码方式,python 就会使用 sys.setdefaultencoding() 指明的方式来解码
print(sys.getdefaultencoding()) //获取python 内部的编码方式
——————————————————————————————
decode() 解码
encode() 编码
python2 中 字符串分为 str 和 unicode 两种
如果字符串在代码中被定义为s=u'中文',则s就是python内部编码unicode。unicode类型再解码会报错。
——————————————————————————————
c++代码中 处理 python的返回值 需要把 PyObject * 转为c++ 类型
PyObject *res=NULL;
res=PyObject_CallObject(pFunc, pArgs);
char *a = "";
PyArg_Parse(res, "s",& a); //方法一
cout << a << endl;
// string b = PyString_AsString(res); //方法二
// cout <<b<< endl;
————重要!!——补充!!——————
在python中编码成中文字符时 最好选"GB18030"
..........
使用 str=a.encode("gbk") 可能在传回c++函数时无法显示数据!!!
推测是utf-8 转gbk 时 有部分编码无法对应 导致丢失! gbk的标准有点老了吧 哈哈
如果有数据丢失的现象 把gbk换成 GB18030
gbk 与 GB18030 的区别 点这里 。。