解决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基本数据类型详细介绍
Mar 11 Python
详细解析Python中的变量的数据类型
May 13 Python
Linux中安装Python的交互式解释器IPython的教程
Jun 13 Python
如何将python中的List转化成dictionary
Aug 15 Python
Django自定义分页效果
Jun 27 Python
Python实现返回数组中第i小元素的方法示例
Dec 04 Python
用Python一键搭建Http服务器的方法
Jun 01 Python
分享vim python缩进等一些配置
Jul 02 Python
Python递归函数实例讲解
Feb 27 Python
Python坐标线性插值应用实现
Nov 13 Python
jupyter notebook读取/导出文件/图片实例
Apr 16 Python
Python中递归以及递归遍历目录详解
Oct 24 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
ThinkPHP模板自定义标签使用方法
2014/06/26 PHP
form表单传递数组数据、php脚本接收的实例
2017/02/09 PHP
yii2多图上传组件的使用教程
2018/05/10 PHP
Javascript MD4
2006/12/20 Javascript
JQuery datepicker 使用方法
2011/05/20 Javascript
css值转换成数值请抛弃parseInt
2011/10/24 Javascript
js获取URL的参数的方法(getQueryString)示例
2013/09/29 Javascript
AngularJS实现根据变量改变动态加载模板的方法
2016/11/04 Javascript
基于nodejs+express4.X实现文件下载的实例代码
2017/07/13 NodeJs
extjs简介_动力节点Java学院整理
2017/07/17 Javascript
vue.js实现的全选与全不选功能示例【基于elementui】
2018/12/03 Javascript
基于iview-admin实现动态路由的示例代码
2019/10/02 Javascript
Vue使用NProgress的操作过程解析
2019/10/10 Javascript
[03:58]兄弟们,回来开黑了!DOTA2昔日战友招募宣传视频
2016/07/17 DOTA
Python实现CET查分的方法
2015/03/10 Python
python中实现k-means聚类算法详解
2017/11/11 Python
Jupyter安装nbextensions,启动提示没有nbextensions库
2020/04/23 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
2018/04/27 Python
python实现简单flappy bird
2018/12/24 Python
python判断字符串或者集合是否为空的实例
2019/01/23 Python
详解将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法
2019/07/06 Python
深入学习python多线程与GIL
2019/08/26 Python
django 装饰器 检测登录状态操作
2020/07/02 Python
深入解读CSS3中transform变换模型的渲染
2016/05/27 HTML / CSS
KLOOK客路:发现更好玩的世界,预订独一无二的旅行体验
2016/12/16 全球购物
联想阿根廷官方网站:Lenovo Argentina
2019/10/14 全球购物
RUIFIER官网:英国奢侈高级珠宝品牌
2020/06/12 全球购物
linux面试相关问题
2012/08/11 面试题
财务管理专业毕业生求职信范文
2013/09/21 职场文书
细节决定成败演讲稿
2014/05/12 职场文书
求职信内容一般写什么?
2015/03/20 职场文书
萤火虫之墓观后感
2015/06/05 职场文书
大学生读书笔记范文
2015/07/01 职场文书
班主任班级管理心得体会
2016/01/07 职场文书
Python中os模块的简单使用及重命名操作
2021/04/17 Python
《极主夫道》真人电影正式预告 定档6月3日上映
2022/04/05 日漫