解决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 相关文章推荐
pycharm 使用心得(七)一些实用功能介绍
Jun 06 Python
使用简单工厂模式来进行Python的设计模式编程
Mar 01 Python
Python中的pygal安装和绘制直方图代码分享
Dec 08 Python
python实现SOM算法
Feb 23 Python
python的dataframe转换为多维矩阵的方法
Apr 11 Python
Python函数定义及传参方式详解(4种)
Mar 18 Python
python 实现矩阵填充0的例子
Nov 29 Python
Python如何使用OS模块调用cmd
Feb 27 Python
Python基于百度AI实现OCR文字识别
Apr 02 Python
使用jupyter Nodebook查看函数或方法的参数以及使用情况
Apr 14 Python
python 爬虫网页登陆的简单实现
Nov 30 Python
使用Python通过企业微信应用给企业成员发消息
Apr 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
比较discuz和ecshop的截取字符串函数php版
2012/09/03 PHP
win7+apache+php+mysql环境配置操作详解
2013/06/10 PHP
PHP计算数组中值的和与乘积的方法(array_sum与array_product函数)
2016/04/01 PHP
PHP parse_ini_file函数的应用与扩展操作示例
2019/01/07 PHP
js表数据排序 sort table data
2009/02/18 Javascript
jQuery EasyUI NumberBox(数字框)的用法
2010/07/08 Javascript
Javascript操作cookie的函数代码
2012/10/03 Javascript
jquery中ajax处理跨域的三大方式
2016/01/05 Javascript
Bootstrap每天必学之折叠(Collapse)插件
2016/04/25 Javascript
Angular中使用ui router实现系统权限控制及开发遇到问题
2016/09/23 Javascript
纯JS实现轮播图
2017/02/22 Javascript
Vue响应式添加、修改数组和对象的值
2017/03/20 Javascript
JavaScript实现的选择排序算法实例分析
2017/04/14 Javascript
vue+iview+less 实现换肤功能
2018/08/17 Javascript
JS替换字符串中指定位置的字符(多种方法)
2020/05/28 Javascript
javascript实现拼图游戏
2021/01/29 Javascript
vue 使用 v-model 双向绑定父子组件的值遇见的问题及解决方案
2021/03/01 Vue.js
详解js创建对象的几种方式和对象方法
2021/03/01 Javascript
Python时间获取及转换知识汇总
2017/01/11 Python
Python外星人入侵游戏编程完整版
2020/03/30 Python
Python enumerate索引迭代代码解析
2018/01/19 Python
Python并发:多线程与多进程的详解
2019/01/24 Python
使用Python代码实现Linux中的ls遍历目录命令的实例代码
2019/09/07 Python
Django和Flask框架优缺点对比
2019/10/24 Python
python中的subprocess.Popen()使用详解
2019/12/25 Python
Opencv求取连通区域重心实例
2020/06/04 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
2020/12/07 Python
澳大利亚设计的优质鞋类和适合澳大利亚生活方式的服装:Rivers
2019/04/23 全球购物
秋季运动会广播稿
2014/02/22 职场文书
一位农村小子的自荐信
2014/04/07 职场文书
前台接待岗位职责
2015/02/03 职场文书
2015年档案管理员工作总结
2015/05/13 职场文书
Nginx开启Brotli压缩算法实现过程详解
2021/03/31 Servers
SQL语句中JOIN的用法场景分析
2021/07/25 SQL Server
Redis中key的过期删除策略和内存淘汰机制
2022/04/12 Redis
TaiShan 200服务器安装Ubuntu 18.04的图文教程
2022/06/28 Servers