解决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爬虫框架Scrapy实战之批量抓取招聘信息
Aug 07 Python
Python使用pygame模块编写俄罗斯方块游戏的代码实例
Dec 08 Python
Python中time模块和datetime模块的用法示例
Feb 28 Python
Python中shutil模块的学习笔记教程
Apr 04 Python
详解python中的线程
Feb 10 Python
Python Unittest自动化单元测试框架详解
Apr 04 Python
Python网络编程基于多线程实现多用户全双工聊天功能示例
Apr 10 Python
对web.py设置favicon.ico的方法详解
Dec 04 Python
django ModelForm修改显示缩略图 imagefield类型的实例
Jul 28 Python
pytorch forward两个参数实例
Jan 17 Python
scrapy-redis分布式爬虫的搭建过程(理论篇)
Sep 29 Python
Python使用sql语句对mysql数据库多条件模糊查询的思路详解
Apr 12 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
关于Appserv无法打开localhost问题的解决方法
2009/10/16 PHP
PHP同时连接多个mysql数据库示例代码
2014/03/17 PHP
PHP+JS实现的商品秒杀倒计时用法示例
2016/11/15 PHP
Laravel 实现密码重置功能
2018/02/23 PHP
laravel异步监控定时调度器实例详解
2019/06/21 PHP
浅谈laravel数据库查询返回的数据形式
2019/10/21 PHP
MacOS下PHP7.1升级到PHP7.4.15的方法
2021/02/22 PHP
深入理解jQuery中live与bind方法的区别
2013/12/18 Javascript
javascript对象的使用和属性操作示例详解
2014/03/02 Javascript
快速入门Vue
2016/12/19 Javascript
jQuery接受后台传递的List的实例详解
2017/08/02 jQuery
JavaScript寄生组合式继承实例详解
2018/01/06 Javascript
Vue模拟数据,实现路由进入商品详情页面的示例
2018/08/31 Javascript
Nodejs让异步变成同步的方法
2019/03/02 NodeJs
小程序rich-text组件如何改变内部img图片样式的方法
2019/05/22 Javascript
layui table 列宽百分比显示的实现方法
2019/09/28 Javascript
基于JS实现视频上传显示进度条
2020/05/12 Javascript
vscode+gulp轻松开发小程序的完整步骤
2020/10/18 Javascript
适用于 Vue 的播放器组件Vue-Video-Player操作
2020/11/16 Javascript
[01:57]2018年度DOTA2最具潜力解说-完美盛典
2018/12/16 DOTA
python出现&quot;IndentationError: unexpected indent&quot;错误解决办法
2017/10/15 Python
Python 绘图库 Matplotlib 入门教程
2018/04/19 Python
python tools实现视频的每一帧提取并保存
2020/03/20 Python
python读csv文件时指定行为表头或无表头的方法
2019/06/26 Python
用python生成与调用cntk模型代码演示方法
2019/08/26 Python
Python 实现Numpy中找出array中最大值所对应的行和列
2019/11/26 Python
css3实现超立体3D图片侧翻倾斜效果
2014/04/16 HTML / CSS
意大利领先的线上奢侈品销售电商:Eleonora Bonucci
2017/10/17 全球购物
写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度
2015/11/18 面试题
打造完美自荐信
2014/01/24 职场文书
初一家长会邀请函
2014/01/31 职场文书
计算机专业毕业生求职信
2014/04/30 职场文书
文员转正自我鉴定怎么写
2014/09/29 职场文书
党员读书活动心得体会
2016/01/14 职场文书
MySQL安装后默认自带数据库的作用详解
2021/04/27 MySQL
vue特效之翻牌动画
2022/04/20 Vue.js