解决c++调用python中文乱码问题
windows中文操作系统下,vs的c++项目默认编码是GB2312
python默认是utf-8编码
最好在c++程序顶上加:
#pragmaexecution_character_set("GB2312")
c++中的字符串一定就是gbk编码
传入python前要做编码转换
准备一个gbk转utf8的函数,如下(网上的):
stringGbkToUtf8(constchar*src_str) { intlen=MultiByteToWideChar(CP_ACP,0,src_str,-1,NULL,0); wchar_t*wstr=newwchar_t[len+1]; memset(wstr,0,len+1); MultiByteToWideChar(CP_ACP,0,src_str,-1,wstr,len); len=WideCharToMultiByte(CP_UTF8,0,wstr,-1,NULL,0,NULL,NULL); char*str=newchar[len+1]; memset(str,0,len+1); WideCharToMultiByte(CP_UTF8,0,wstr,-1,str,len,NULL,NULL); stringstrTemp=str; if(wstr)delete[]wstr; if(str)delete[]str; returnstrTemp; }
示例性代码:
#pragmaexecution_character_set("GB2312") #include#include #include #include #include #include usingnamespaceSystem; usingnamespaceSystem::Runtime::InteropServices; usingnamespaceSystem::Collections::Generic; usingnamespaceSystem::Diagnostics; usingnamespaceSystem::Threading; usingnamespacestd; intmain() { constchar*name="东方红1号"; Py_Initialize();//初始化python PyRun_SimpleString("importsys"); PyRun_SimpleString("sys.path.append('./')"); PyObject*pModule=PyImport_ImportModule("hello"); PyObject*pFunc1=PyObject_GetAttrString(pModule,"sayhello"); PyObject*pArgs=PyTuple_New(1); PyObject*pV1=Py_BuildValue("s",GbkToUtf8(name).c_str()); PyTuple_SetItem(pArgs,0,pV1); PyObject*result=PyObject_CallObject(pFunc1,pArgs); Py_Finalize(); return0;
到此这篇关于解决c++调用python中文乱码问题的文章就介绍到这了,更多相关c++调用python中文乱码内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!