解决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之print详解
Sep 28 Python
简介二分查找算法与相关的Python实现示例
Aug 26 Python
怎样使用Python脚本日志功能
Aug 14 Python
Python2.7下安装Scrapy框架步骤教程
Dec 22 Python
Python 读取某个目录下所有的文件实例
Jun 23 Python
python批量赋值操作实例
Oct 22 Python
Python学习笔记之文件的读写操作实例分析
Aug 07 Python
python利用datetime模块计算程序运行时间问题
Feb 20 Python
基于Python实现简单学生管理系统
Jul 24 Python
深入浅析Python代码规范性检测
Jul 31 Python
python 使用三引号时容易犯的小错误
Oct 21 Python
PyCharm最新激活码(2020/10/27全网最新)
Oct 27 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
用函数读出数据表内容放入二维数组
2006/10/09 PHP
windows下开发并编译PHP扩展的方法
2011/03/18 PHP
ThinkPHP模板引擎之导入资源文件方法详解
2014/06/18 PHP
php实现字符串首字母转换成大写的方法
2015/03/17 PHP
php实现模拟登陆方正教务系统抓取课表
2015/05/19 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
jQuery操作 input type=checkbox的实现代码
2012/06/14 Javascript
jquery入门—编写一个导航条(可伸缩)
2013/01/07 Javascript
js中精确计算加法和减法示例
2014/03/28 Javascript
from表单多个按钮提交用onclick跳转不同action
2014/04/24 Javascript
js操作模态窗口及父子窗口间相互传值示例
2014/06/09 Javascript
JavaScript里四舍五入函数round用法实例
2015/04/06 Javascript
JS阻止事件冒泡行为和闭包的方法
2016/06/16 Javascript
Vue表单验证插件的制作过程
2017/04/01 Javascript
发布Angular应用至生产环境的方法
2018/12/10 Javascript
使用vue-router切换页面时,获取上一页url以及当前页面url的方法
2019/05/06 Javascript
js对象数组和对象的使用实例详解
2019/08/27 Javascript
基于javascript实现贪吃蛇小游戏
2019/11/25 Javascript
Python实现微信公众平台自定义菜单实例
2015/03/20 Python
使用Python实现一个简单的项目监控
2015/03/31 Python
基于循环神经网络(RNN)实现影评情感分类
2018/03/26 Python
对pandas中时间窗函数rolling的使用详解
2018/11/28 Python
pyqt5实现登录界面的模板
2020/05/30 Python
django 消息框架 message使用详解
2019/07/22 Python
python要安装在哪个盘
2020/06/15 Python
从零开始的TensorFlow+VScode开发环境搭建的步骤(图文)
2020/08/31 Python
Python 必须了解的5种高级特征
2020/09/10 Python
纯CSS3实现扇形动画菜单(简化版)实例源码
2017/01/17 HTML / CSS
Lookfantastic瑞典:英国知名美妆购物网站
2018/04/06 全球购物
Peter Millar官网:美国高档生活服饰品牌
2018/07/02 全球购物
世界上最大的字体市场:MyFonts
2020/01/10 全球购物
实习期自我鉴定
2013/10/11 职场文书
招股说明书范本
2014/05/06 职场文书
贷款担保申请书
2014/05/20 职场文书
大学生自荐信范文
2015/03/05 职场文书
2015年林业工作总结
2015/05/14 职场文书