解决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字符串转换成浮点数函数分享
Jul 24 Python
Python2.x与Python3.x的区别
Jan 14 Python
基于Python实现对PDF文件的OCR识别
Aug 05 Python
Python守护线程用法实例
Jun 23 Python
python 二分查找和快速排序实例详解
Oct 13 Python
78行Python代码实现现微信撤回消息功能
Jul 26 Python
itchat-python搭建微信机器人(附示例)
Jun 11 Python
python 处理微信对账单数据的实例代码
Jul 19 Python
python中append实例用法总结
Jul 30 Python
python中时间转换datetime和pd.to_datetime详析
Aug 11 Python
Python底层封装实现方法详解
Jan 22 Python
tensorflow 获取checkpoint中的变量列表实例
Feb 11 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
B2K与车机的中波PK
2021/03/02 无线电
一个基于phpQuery的php通用采集类分享
2014/04/09 PHP
PHP扩展模块memcached长连接使用方法分析
2014/12/24 PHP
PHP中JSON的应用技巧
2015/10/10 PHP
如何动态的导入js文件具体该怎么实现
2014/01/14 Javascript
nodejs命令行参数处理模块commander使用实例
2014/09/17 NodeJs
兼容主流浏览器的jQuery+CSS 实现遮罩层的简单代码
2014/10/14 Javascript
AngularJS入门教程之学习环境搭建
2014/12/06 Javascript
jQuery判断浏览器并动态调整select宽度的方法
2016/03/02 Javascript
基于jquery实现三级下拉菜单
2016/05/10 Javascript
javascript实现的上下无缝滚动效果
2016/09/19 Javascript
简单理解js的冒泡排序
2016/12/19 Javascript
微信小程序 picker 组件详解及简单实例
2017/01/10 Javascript
BootStrap表单验证实例代码
2017/01/13 Javascript
初识NodeJS服务端开发入门(Express+MySQL)
2017/04/07 NodeJs
详解Angular中的自定义服务Service、Provider以及Factory
2017/04/22 Javascript
微信小程序定位当前城市的方法
2018/07/19 Javascript
vue项目中将element-ui table表格写成组件的实现代码
2019/06/12 Javascript
详解webpack引用jquery(第三方模块)的三种办法
2019/08/21 jQuery
jquery实现广告上下滚动效果
2021/03/04 jQuery
Python写入数据到MP3文件中的方法
2015/07/10 Python
python二分查找算法的递归实现方法
2016/05/12 Python
Python subprocess模块常见用法分析
2018/06/12 Python
Python中Proxypool库的安装与配置
2018/10/19 Python
python解析xml简单示例
2019/06/21 Python
python 缺失值处理的方法(Imputation)
2019/07/02 Python
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
2019/07/15 Python
Django 框架模型操作入门教程
2019/11/05 Python
python实现的多任务版udp聊天器功能案例
2019/11/13 Python
Pytorch 多维数组运算过程的索引处理方式
2019/12/27 Python
Python3基本输入与输出操作实例分析
2020/02/14 Python
Keras中 ImageDataGenerator函数的参数用法
2020/07/03 Python
pandas使用函数批量处理数据(map、apply、applymap)
2020/11/27 Python
学习交流会主持词
2014/04/01 职场文书
2016优秀护士求职自荐信
2016/01/28 职场文书
Python实现简单的俄罗斯方块游戏
2021/09/25 Python