解决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高手之路python处理excel文件(方法汇总)
Jan 07 Python
Python简单实现子网掩码转换的方法
Apr 13 Python
python非递归全排列实现方法
Apr 10 Python
Python使用openpyxl读写excel文件的方法
Jun 30 Python
python多进程实现进程间通信实例
Nov 24 Python
Django 2.0版本的新特性抢先看!
Jan 05 Python
python把数组中的数字每行打印3个并保存在文档中的方法
Jul 17 Python
Python企业编码生成系统总体系统设计概述
Jul 26 Python
详解PyTorch手写数字识别(MNIST数据集)
Aug 16 Python
Pytorch保存模型用于测试和用于继续训练的区别详解
Jan 10 Python
pandas数据分组groupby()和统计函数agg()的使用
Mar 04 Python
Python实现Hash算法
Mar 18 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
Oracle 常见问题解答
2006/10/09 PHP
基于php-fpm 参数的深入理解
2013/06/03 PHP
Mac OS下配置PHP+MySql环境
2015/02/25 PHP
PHP+Javascript实现在线拍照功能实例
2015/07/18 PHP
CodeIgniter视图使用注意事项
2016/01/20 PHP
PHP实现图片批量打包下载功能
2017/03/01 PHP
完美解决在ThinkPHP控制器中命名空间的问题
2017/05/05 PHP
用js实现键盘方向键翻页功能的代码
2007/06/03 Javascript
用JavaScript实现单继承和多继承的简单方法
2009/03/29 Javascript
jQuery select的操作实现代码
2009/05/06 Javascript
Iframe 自适应高度并实时监控高度变化的js代码
2009/10/30 Javascript
Javascript倒计时代码
2010/08/12 Javascript
JavaScript实现鼠标点击后层展开效果的方法
2015/05/13 Javascript
js实现图片上传并正常显示
2015/12/19 Javascript
Sort()函数的多种用法
2016/03/20 Javascript
JavaScript原型继承_动力节点Java学院整理
2017/06/30 Javascript
使用JavaScript根据图片获取条形码的方法
2017/07/04 Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
2017/10/25 Javascript
jQuery 防止相同的事件快速重复触发方法
2018/02/08 jQuery
微信小程序自定义键盘 内部虚拟支付
2018/12/20 Javascript
Vue scrollBehavior 滚动行为实现后退页面显示在上次浏览的位置
2019/05/27 Javascript
python数据结构之图的实现方法
2015/07/08 Python
Python列表切片操作实例总结
2019/02/19 Python
10个python爬虫入门实例(小结)
2020/11/01 Python
十八大闭幕感言
2014/01/22 职场文书
交通安全教育制度
2014/02/02 职场文书
注册资产评估专业求职信
2014/07/16 职场文书
党的群众路线教育实践活动学习计划
2014/11/03 职场文书
教师群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
写给医生的感谢信
2015/01/22 职场文书
中小学生安全教育观后感
2015/06/17 职场文书
婚宴领导致辞
2015/07/28 职场文书
党员干部学习心得体会
2016/01/23 职场文书
导游词之香港-太平山顶
2019/10/18 职场文书
python脚本框架webpy模板控制结构
2021/11/20 Python
python自动化测试通过日志3分钟定位bug
2021/11/20 Python