解决c++调用python中文乱码问题


Posted in Python onJuly 29, 2020

windows中文操作系统下,vs的c++项目默认编码是GB2312

python默认是utf-8编码

最好在c++程序顶上加:

#pragma execution_character_set("GB2312")

c++中的字符串一定就是gbk编码

传入python前要做编码转换

准备一个gbk转utf8的函数,如下(网上的):

string GbkToUtf8(const char* src_str)
    {
      int len = MultiByteToWideChar(CP_ACP, 0, src_str, -1, NULL, 0);
      wchar_t* wstr = new wchar_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 = new char[len + 1];
      memset(str, 0, len + 1);
      WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, len, NULL, NULL);
      string strTemp = str;
      if (wstr) delete[] wstr;
      if (str) delete[] str;
      return strTemp;
    }

示例性代码:

#pragma execution_character_set("GB2312")
#include <stdlib.h>
#include <Windows.h>   
#include <iostream>
#include <Python.h>
#include <string>
#include <atlstr.h>

using namespace System;
using namespace System::Runtime::InteropServices;
using namespace System::Collections::Generic;
using namespace System::Diagnostics;
using namespace System::Threading;
using namespace std;

int main()
{  
  const char* name = "东方红1号";
  Py_Initialize();//初始化python
  PyRun_SimpleString("import sys");
  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();
  return 0;

到此这篇关于解决c++调用python中文乱码问题的文章就介绍到这了,更多相关c++调用python中文乱码内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python Django模板的使用方法(图文)
Nov 04 Python
Python XML RPC服务器端和客户端实例
Nov 22 Python
python中根据字符串调用函数的实现方法
Jun 12 Python
Python用UUID库生成唯一ID的方法示例
Dec 15 Python
git进行版本控制心得详谈
Dec 10 Python
在pandas中一次性删除dataframe的多个列方法
Apr 10 Python
python读取Excel表格文件的方法
Sep 02 Python
Python如何实现在字符串里嵌入双引号或者单引号
Mar 02 Python
django-orm F对象的使用 按照两个字段的和,乘积排序实例
May 18 Python
python判断元素是否存在的实例方法
Sep 24 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
Oct 02 Python
Python 恐龙跑跑小游戏实现流程
Feb 15 Python
Python 实现简单的客户端认证
Jul 29 #Python
Tensorflow使用Anaconda、pycharm安装记录
Jul 29 #Python
学python爬虫能做什么
Jul 29 #Python
Python 创建TCP服务器的方法
Jul 28 #Python
Python实现画图软件功能方法详解
Jul 28 #Python
Python绘图之柱形图绘制详解
Jul 28 #Python
Python如何定义接口和抽象类
Jul 28 #Python
You might like
php读取文件内容的方法汇总
2015/01/24 PHP
详解PHP错误日志的获取方法
2015/07/20 PHP
PHP从零开始打造自己的MVC框架之路由类实现方法分析
2019/06/03 PHP
双击滚屏-常用推荐
2006/11/29 Javascript
网页和浏览器兼容性问题汇总(draft1)
2009/06/01 Javascript
JavaScript对象的property属性详解
2014/04/01 Javascript
随鼠标移动的时钟非常漂亮遗憾的是只支持IE
2014/08/12 Javascript
jQuery实现页面顶部显示的进度条效果完整实例
2015/12/09 Javascript
JavaScript简单计算人的年龄示例
2017/04/15 Javascript
使用JS在浏览器中判断当前网络连接状态的几种方法
2017/05/05 Javascript
Vue.js常用指令的使用小结
2017/06/23 Javascript
基于Cookie常用操作以及属性介绍
2017/09/07 Javascript
Javascript 之封装(Package)
2018/09/14 Javascript
webpack DllPlugin xxx is not defined解决办法
2019/12/13 Javascript
[06:13]DOTA2进化论(修改版)
2013/10/08 DOTA
[01:45]2014DOTA2 TI预选赛预选赛 战前探营!
2014/05/21 DOTA
基于Django URL传参 FORM表单传数据 get post的用法实例
2018/05/28 Python
Python后台管理员管理前台会员信息的讲解
2019/01/28 Python
Python中一般处理中文的几种方法
2019/03/06 Python
使用django实现一个代码发布系统
2019/07/18 Python
python如何将多个PDF进行合并
2019/08/13 Python
python pyecharts 实现一个文件绘制多张图
2020/05/13 Python
Python 如何对文件目录操作
2020/07/10 Python
Anaconda使用IDLE的实现示例
2020/09/23 Python
一个J2EE项目团队的主要人员组成是什么
2012/06/04 面试题
营销与策划个人求职信
2013/09/22 职场文书
大学活动策划书范文
2014/01/10 职场文书
创意广告词
2014/03/17 职场文书
2014年医学生毕业自我鉴定
2014/03/26 职场文书
文员求职信
2014/07/15 职场文书
社会实践活动总结
2015/02/05 职场文书
2015年学生会纪检部工作总结
2015/03/31 职场文书
公路施工安全责任书
2015/05/08 职场文书
2015年教研工作总结
2015/05/23 职场文书
2015年民兵整组工作总结
2015/07/24 职场文书
python中sys模块的介绍与实例
2021/04/17 Python