解决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 相关文章推荐
Bottle框架中的装饰器类和描述符应用详解
Oct 28 Python
python入门教程 python入门神图一张
Mar 05 Python
DataFrame中去除指定列为空的行方法
Apr 08 Python
PyTorch线性回归和逻辑回归实战示例
May 22 Python
python简易实现任意位数的水仙花实例
Nov 13 Python
python实现在遍历列表时,直接对dict元素增加字段的方法
Jan 15 Python
python 变量初始化空列表的例子
Nov 28 Python
Tensorflow 实现将图像与标签数据转化为tfRecord文件
Feb 17 Python
基于Python测试程序是否有错误
May 16 Python
Python替换NumPy数组中大于某个值的所有元素实例
Jun 08 Python
Pytest测试框架基本使用方法详解
Nov 25 Python
python 实现超级玛丽游戏
Nov 25 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抓取页面的几种方法详解
2013/06/17 PHP
PHP取整函数:ceil,floor,round,intval的区别详细解析
2013/08/31 PHP
作为程序员必知的16个最佳PHP库
2015/12/09 PHP
PHP框架性能测试报告
2016/05/08 PHP
PHP多进程编程总结(推荐)
2016/07/18 PHP
PHP数字金额转换成中文大写显示
2019/01/05 PHP
php判断数组是否为空的实例方法
2020/05/10 PHP
类似GMAIL的Ajax信息反馈显示
2010/02/16 Javascript
jquery 日期分离成年月日的代码
2010/05/14 Javascript
JS+flash实现chrome和ie浏览器下同时可以复制粘贴
2013/09/22 Javascript
Js使用WScript.Shell对象执行.bat文件和cmd命令
2014/12/18 Javascript
Javascript中的高阶函数介绍
2015/03/15 Javascript
javascript实现粘贴qq截图功能(clipboardData)
2016/05/29 Javascript
JavaScript中点击事件的写法
2016/06/28 Javascript
浅谈JavaScript中的分支结构
2016/07/01 Javascript
node.js中module模块的功能理解与用法实例分析
2020/02/14 Javascript
Python使用自带的ConfigParser模块读写ini配置文件
2016/06/26 Python
python简单线程和协程学习心得(分享)
2017/06/14 Python
Python操作SQLite数据库的方法详解
2017/06/16 Python
python性能测量工具cProfile使用解析
2019/09/26 Python
Python多线程爬取豆瓣影评API接口
2019/10/22 Python
python3注册全局热键的实现
2020/03/22 Python
pycharm中leetcode插件使用图文详解
2020/12/07 Python
如何用Python和JS实现的Web SSH工具
2021/02/23 Python
荷兰鞋子在线:Nelson Schoenen
2017/12/25 全球购物
波兰化妆品和护肤品购物网站:eKobieca
2019/08/30 全球购物
意大利在线高尔夫商店:Online Golf
2021/03/09 全球购物
名词解释型面试题(主要是网络)
2013/12/27 面试题
十岁生日家长答谢词
2014/01/17 职场文书
心理健康课教学反思
2014/02/13 职场文书
大型演出策划方案
2014/05/28 职场文书
电子商务系毕业生自荐信
2014/05/29 职场文书
党员批评与自我批评总结
2014/10/15 职场文书
医院党建工作总结2015
2015/05/26 职场文书
美德少年事迹材料(2016推荐版)
2016/02/25 职场文书
导游词之江南周庄
2019/12/06 职场文书