解决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 相关文章推荐
matplotlib在python上绘制3D散点图实例详解
Dec 09 Python
使用Python监视指定目录下文件变更的方法
Oct 15 Python
计算机二级python学习教程(1) 教大家如何学习python
May 16 Python
python向字符串中添加元素的实例方法
Jun 28 Python
用Anaconda安装本地python包的方法及路径问题(图文)
Jul 16 Python
Python 调用 Windows API COM 新法
Aug 22 Python
如何利用python给图片添加半透明水印
Sep 06 Python
Python装饰器使用你可能不知道的几种姿势
Oct 25 Python
Python实现线性插值和三次样条插值的示例代码
Nov 13 Python
pytorch实现seq2seq时对loss进行mask的方式
Feb 18 Python
PyTorch实现重写/改写Dataset并载入Dataloader
Jul 14 Python
使用python实现学生信息管理系统
Feb 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
xajax写的留言本
2006/11/25 PHP
PHP模糊查询的实现方法(推荐)
2016/09/06 PHP
php unicode编码和字符串互转的方法
2020/08/12 PHP
Using the TextRange Object
2006/10/14 Javascript
jquery 学习之二 属性(类)
2010/11/25 Javascript
jquery 实现上下滚动效果示例代码
2013/08/09 Javascript
jquery中获取id值方法小结
2013/09/22 Javascript
使用text方法获取Html元素文本信息示例
2014/09/01 Javascript
JavaScript中的值是按值传递还是按引用传递问题探讨
2015/01/30 Javascript
JS运动框架之分享侧边栏动画实例
2015/03/03 Javascript
浅谈Node.js中的定时器
2015/06/18 Javascript
AngularJS手动表单验证
2016/02/01 Javascript
js判断请求的url是否可访问,支持跨域判断的实现方法
2016/09/17 Javascript
jQuery实现字体颜色渐变效果的方法
2017/03/29 jQuery
angular.js中解决跨域问题的三种方式
2017/07/12 Javascript
基于Vue实例生命周期(全面解析)
2017/08/16 Javascript
jQuery实现的表格前端排序功能示例
2017/09/18 jQuery
vue.js实例对象+组件树的详细介绍
2017/10/20 Javascript
js实现随机点名器精简版
2020/06/29 Javascript
[50:38]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第二场 3月7日
2021/03/11 DOTA
python脚本监控Tomcat服务器的方法
2018/07/06 Python
python无限生成不重复(字母,数字,字符)组合的方法
2018/12/04 Python
Python学习笔记之文件的读写操作实例分析
2019/08/07 Python
安装PyInstaller失败问题解决
2019/12/14 Python
python 实现多维数组(array)排序
2020/02/28 Python
使用Keras加载含有自定义层或函数的模型操作
2020/06/10 Python
荷兰男士时尚网上商店:Suitable
2017/12/25 全球购物
三查三看党性分析材料
2014/02/18 职场文书
师德演讲稿范文
2014/05/06 职场文书
计算机网络专业求职信
2014/06/05 职场文书
有关环保的标语
2014/06/13 职场文书
2014应届本科生自我评价
2014/09/13 职场文书
故宫英文导游词
2015/01/31 职场文书
高中生打架检讨书1000字
2015/02/17 职场文书
《丑小鸭》教学反思
2016/02/19 职场文书
2016年幼儿园庆六一开幕词
2016/03/04 职场文书