解决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之编写类之四再论继承
Oct 11 Python
Python中str.format()详解
Mar 12 Python
Python+tkinter使用40行代码实现计算器功能
Jan 30 Python
深入浅析python with语句简介
Apr 11 Python
python安装twisted的问题解析
Aug 21 Python
python集合比较(交集,并集,差集)方法详解
Sep 13 Python
Python 调用 Windows API COM 新法
Aug 22 Python
分享一个pycharm专业版安装的永久使用方法
Sep 24 Python
python中必要的名词解释
Nov 20 Python
解决Python使用列表副本的问题
Dec 19 Python
Pytest实现setup和teardown的详细使用详解
Apr 17 Python
python解析照片拍摄时间进行图片整理
Jul 23 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
yii2简单使用less代替css示例
2017/03/10 PHP
将jQuery应用于login页面的问题及解决
2009/10/17 Javascript
Javascript 设计模式(二) 闭包
2010/05/26 Javascript
新增加的内容是如何将div的scrollbar自动移动最下面
2014/01/02 Javascript
javascript结合fileReader 实现上传图片
2015/01/30 Javascript
第三篇Bootstrap网格基础
2016/06/21 Javascript
利用纯Vue.js构建Bootstrap组件
2016/11/03 Javascript
Vue表单类的父子组件数据传递示例
2018/05/03 Javascript
bootstrap模态框关闭后清除模态框的数据方法
2018/08/10 Javascript
nodejs 使用nodejs-websocket模块实现点对点实时通讯
2018/11/28 NodeJs
在Web关闭页面时发送Ajax请求的实现方法
2019/03/07 Javascript
微信小程序返回箭头跳转到指定页面实例解析
2019/10/08 Javascript
浅谈layui 绑定form submit提交表单的注意事项
2019/10/25 Javascript
vue flex 布局实现div均分自动换行的示例代码
2020/08/05 Javascript
[08:17]Ti9 现场cosplay
2019/09/10 DOTA
Python的内存泄漏及gc模块的使用分析
2014/07/16 Python
python3 图片referer防盗链的实现方法
2018/03/12 Python
在Django model中设置多个字段联合唯一约束的实例
2019/07/17 Python
tensorboard显示空白的解决
2020/02/15 Python
简单介绍一下pyinstaller打包以及安全性的实现
2020/06/02 Python
django Model层常用验证器及自定义验证器详解
2020/07/15 Python
详解使用scrapy进行模拟登陆三种方式
2021/02/21 Python
CHARLES & KEITH澳大利亚官网:新加坡时尚品牌
2019/01/22 全球购物
解释一下ArrayList Vector和LinkedList的实现和区别
2013/04/26 面试题
公务员职业生涯规划书范文  
2014/01/19 职场文书
大学生优秀团员事迹材料
2014/01/30 职场文书
狼和鹿教学反思
2014/02/05 职场文书
六查六看剖析材料
2014/02/15 职场文书
招聘专员岗位职责
2014/03/07 职场文书
厕所文明标语
2014/06/11 职场文书
无犯罪记录证明
2014/09/19 职场文书
农业局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
2015年党性分析材料
2014/12/19 职场文书
2016年感恩节活动总结大全
2016/04/01 职场文书
教你怎么用Python生成九宫格照片
2021/05/20 Python
python 判断文件或文件夹是否存在
2022/03/18 Python