解决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 相关文章推荐
Windows下python2.7.8安装图文教程
May 26 Python
Python 查看文件的读写权限方法
Jan 23 Python
详解Python中如何写控制台进度条的整理
Mar 07 Python
python爬虫正则表达式之处理换行符
Jun 08 Python
python 列表降维的实例讲解
Jun 28 Python
python实现在遍历列表时,直接对dict元素增加字段的方法
Jan 15 Python
使用Python快速制作可视化报表的方法
Feb 03 Python
python根据txt文本批量创建文件夹
Dec 08 Python
Python3列表List入门知识附实例
Feb 09 Python
Python基于Dlib的人脸识别系统的实现
Feb 26 Python
Python简单实现词云图代码及步骤解析
Jun 04 Python
Python3.9新特性详解
Oct 10 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 生成随机验证码图片代码
2010/02/08 PHP
ThinkPHP的截取字符串函数无法显示省略号的解决方法
2014/06/25 PHP
php 利用array_slice函数获取随机数组或前几条数据
2015/09/30 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
Js中sort()方法的用法
2006/11/04 Javascript
JavaScript 学习笔记 Black.Caffeine 09.11.28
2009/11/30 Javascript
一张表格告诉你windows.onload()与$(document).ready()的区别
2014/05/16 Javascript
JS的事件绑定深入认识
2014/06/26 Javascript
js实现感应鼠标图片透明度变化的方法
2015/02/20 Javascript
JS实现控制表格单元格垂直对齐的方法
2015/03/30 Javascript
jQuery实现仿美橙互联两级导航菜单效果完整实例
2015/09/17 Javascript
js仿手机页面文件下拉刷新效果
2016/10/14 Javascript
node.js发送邮件email的方法详解
2017/01/06 Javascript
深入理解Javascript箭头函数中的this
2017/02/13 Javascript
微信小程序网络请求的封装与填坑之路
2017/04/01 Javascript
详解动画插件wow.js的使用方法
2017/09/13 Javascript
js字符串类型String常用操作实例总结
2019/07/05 Javascript
JS控制只能输入数字并且最多允许小数点两位
2019/11/24 Javascript
微信小程序swiper使用网络图片不显示问题解决
2019/12/13 Javascript
删除目录下相同文件的python代码(逐级优化)
2012/05/25 Python
python求列表交集的方法汇总
2014/11/10 Python
Python读取txt某几列绘图的方法
2018/10/14 Python
15行Python代码实现网易云热门歌单实例教程
2019/03/10 Python
Python Web框架之Django框架文件上传功能详解
2019/08/16 Python
python实现递归查找某个路径下所有文件中的中文字符
2019/08/31 Python
Python猴子补丁Monkey Patch用法实例解析
2020/03/23 Python
2020新版本pycharm+anaconda+opencv+pyqt环境配置学习笔记,亲测可用
2020/03/24 Python
联想中国官方商城:Lenovo China
2017/10/18 全球购物
法律专业自我鉴定
2013/10/03 职场文书
好邻里事迹材料
2014/01/16 职场文书
会议室标语
2014/06/21 职场文书
幼儿园中班个人总结
2015/02/28 职场文书
2015学校师德师风工作总结
2015/04/22 职场文书
工作简报范文
2015/07/21 职场文书
2016年小学优秀班主任事迹材料
2016/02/29 职场文书
2019银行员工个人工作自我鉴定
2019/06/27 职场文书