c++转换python返回的字符串

2023-05-16

PyArg_Parse可以将python返回参数转换为c++类型
对于字符串转换用,如下方法:(格式必须这样,其他方式都转换不了)
char *p=NULL;
PyArg_Parse(pRet, “s”, &p);

我这个c++工程是gbk编码,python文件也是用的gb2312编码,但是python字符串传给c++时是转成utf8的,所以转换完后还得转成gbk,否则会中文乱码。
代码如下:


static std::string UTF8ToGBK(const char* strUTF8)
{
	int len = MultiByteToWideChar(CP_UTF8, 0, strUTF8, -1, NULL, 0);
	wchar_t* wszGBK = new wchar_t[len + 1];
	memset(wszGBK, 0, len * 2 + 2);
	MultiByteToWideChar(CP_UTF8, 0, strUTF8, -1, wszGBK, len);
	len = WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, NULL, 0, NULL, NULL);
	char* szGBK = new char[len + 1];
	memset(szGBK, 0, len + 1);
	WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, szGBK, len, NULL, NULL);
	std::string strTemp(szGBK);

	if (wszGBK) delete[] wszGBK;
	if (szGBK) delete[] szGBK;

	return strTemp;
}

void Get()
{
	Py_Initialize();    // 初始化
	// 加载模块
	PyObject* pModule = PyImport_ImportModule("Test");//此处是python文件名
	if (!pModule) // 加载模块失败
	{
		return FALSE;
	}

	// 加载函数
	PyObject* pv = PyObject_GetAttrString(pModule, "CheckData");//此处是python文件中的函数名称
	if (!pv || !PyCallable_Check(pv))  // 验证是否加载成功
	{
		return FALSE;
	}

	PyObject* args = PyTuple_New(1);   // 2个参数
	PyTuple_SetItem(args, 0, Py_BuildValue("i", 8));//0--序号,i表示创建int型变量

	PyObject* pRet = PyObject_CallObject(pv, args);
	char *p=NULL;
	PyArg_Parse(pRet, "s", &p);
	auto s2 =UTF8ToGBK(p);//python字符串转换完是utf8编码,需再转成gbk
	Py_Finalize();
}

Test.py

# -*- coding: gb2312 -*-
import string
import os
import base64


def CheckData(tmpdata):
    return '中文'
	
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++转换python返回的字符串 的相关文章

  • 尽管极其懒惰,但如何在 Python 中模拟 IMAP 服务器?

    我很好奇是否有一种简单的方法来模拟 IMAP 服务器 例如imaplib模块 在Python中 without做很多工作 是否有预先存在的解决方案 理想情况下 我可以连接到现有的 IMAP 服务器 进行转储 并让模拟服务器在真实的邮箱 电子
  • Django REST序列化器:创建对象而不保存

    我已经开始使用 Django REST 框架 我想做的是使用一些 JSON 发布请求 从中创建一个 Django 模型对象 然后使用该对象而不保存它 我的 Django 模型称为 SearchRequest 我所拥有的是 api view
  • Python PAM 模块的安全问题?

    我有兴趣编写一个 PAM 模块 该模块将利用流行的 Unix 登录身份验证机制 我过去的大部分编程经验都是使用 Python 进行的 并且我正在交互的系统已经有一个 Python API 我用谷歌搜索发现pam python http pa
  • 如何在 Sublime Text 2 的 OSX 终端中显示构建结果

    我刚刚从 TextMate 切换到 Sublime Text 2 我非常喜欢它 让我困扰的一件事是默认的构建结果显示在 ST2 的底部 我的程序产生一些很长的结果 显示它的理想方式 如在 TM2 中 是并排查看它们 如何在 Mac 操作系统
  • Python 多处理示例不起作用

    我正在尝试学习如何使用multiprocessing但我无法让它发挥作用 这是代码文档 http docs python org 2 library multiprocessing html from multiprocessing imp
  • 如何使用包含代码的“asyncio.sleep()”进行单元测试?

    我在编写 asyncio sleep 包含的单元测试时遇到问题 我要等待实际的睡眠时间吗 I used freezegun到嘲笑时间 当我尝试使用普通可调用对象运行测试时 这个库非常有用 但我找不到运行包含 asyncio sleep 的测
  • 如何使用 Scrapy 从网站获取所有纯文本?

    我希望在 HTML 呈现后 可以从网站上看到所有文本 我正在使用 Scrapy 框架使用 Python 工作 和xpath body text 我能够获取它 但是带有 HTML 标签 而且我只想要文本 有什么解决办法吗 最简单的选择是ext
  • 为 pandas 数据透视表中的每个值列定义 aggfunc

    试图生成具有多个 值 列的数据透视表 我知道我可以使用 aggfunc 按照我想要的方式聚合值 但是如果我不想对两列求和或求平均值 而是想要一列的总和 同时求另一列的平均值 该怎么办 那么使用 pandas 可以做到这一点吗 df pd D
  • keras加载模型错误尝试将包含17层的权重文件加载到0层的模型中

    我目前正在使用 keras 开发 vgg16 模型 我用我的一些图层微调 vgg 模型 拟合我的模型 训练 后 我保存我的模型model save name h5 可以毫无问题地保存 但是 当我尝试使用以下命令重新加载模型时load mod
  • IRichBolt 在storm-1.0.0 和 pyleus-0.3.0 上运行拓扑时出错

    我正在运行风暴拓扑 pyleus verbose local xyz topology jar using storm 1 0 0 pyleus 0 3 0 centos 6 6并得到错误 线程 main java lang NoClass
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • ExpectedFailure 被计为错误而不是通过

    我在用着expectedFailure因为有一个我想记录的错误 我现在无法修复 但想将来再回来解决 我的理解expectedFailure是它会将测试计为通过 但在摘要中表示预期失败的数量为 x 类似于它如何处理跳过的 tets 但是 当我
  • Python:尝试检查有效的电话号码

    我正在尝试编写一个接受以下格式的电话号码的程序XXX XXX XXXX并将条目中的任何字母翻译为其相应的数字 现在我有了这个 如果启动不正确 它将允许您重新输入正确的数字 然后它会翻译输入的原始数字 我该如何解决 def main phon
  • 循环中断打破tqdm

    下面的简单代码使用tqdm https github com tqdm tqdm在循环迭代时显示进度条 import tqdm for f in tqdm tqdm range 100000000 if f gt 100000000 4 b
  • Python 3 中“map”类型的对象没有 len()

    我在使用 Python 3 时遇到问题 我得到了 Python 2 7 代码 目前我正在尝试更新它 我收到错误 类型错误 map 类型的对象没有 len 在这部分 str len seed candidates 在我像这样初始化它之前 se
  • Nuitka 未使用 nuitka --recurse-all hello.py [错误] 编译 exe

    我正在尝试通过 nuitka 创建一个简单的 exe 这样我就可以在我的笔记本电脑上运行它 而无需安装 Python 我在 Windows 10 上并使用 Anaconda Python 3 我输入 nuitka recurse all h
  • 如何从没有结尾的管道中读取 python 中的 stdin

    当管道来自 打开 时 不知道正确的名称 我无法从 python 中的标准输入或管道读取数据 文件 我有作为例子管道测试 py import sys import time k 0 try for line in sys stdin k k
  • 在 Pandas DataFrame Python 中添加新列[重复]

    这个问题在这里已经有答案了 例如 我在 Pandas 中有数据框 Col1 Col2 A 1 B 2 C 3 现在 如果我想再添加一个名为 Col3 的列 并且该值基于 Col2 式中 如果Col2 gt 1 则Col3为0 否则为1 所以
  • 如何使用google colab在jupyter笔记本中显示GIF?

    我正在使用 google colab 想嵌入一个 gif 有谁知道如何做到这一点 我正在使用下面的代码 它并没有在笔记本中为 gif 制作动画 我希望笔记本是交互式的 这样人们就可以看到代码的动画效果 而无需运行它 我发现很多方法在 Goo

随机推荐

  • 解决ubuntu全屏后分辨率低的问题

    Ubuntu 设置屏幕分辨率显示Unknown display 无法设置分辨率 解决方法 方法一 xff1a xff08 临时性 xff0c 重启会失效 xff09 使用xrandr命令调节分辨率 xff0c 带 号的为当前分辨率 xff0
  • ubuntu18.04安装WINEHQ时出现的问题:E: 文件 list 第 x 行的记录格式有误 /etc/apt/sources.list (Component) E: 无法读取源列表。

    ubuntu18 04安装WINEHQ时出现的问题 xff1a E 文件 list 第 x 行的记录格式有误 etc apt sources list Component E 无法读取源列表 详细安装过程可以参考 xff08 官网 xff0
  • Hexo系列——(一) Hexo的安装与使用

    目录 前言一 安装Node js和Git1 安装node js和npm xff0c npm是node js的包管理工具2 更新npm的镜像源 3 全局安装n管理器 用于管理node js 4 安装最新的node js xff08 stabl
  • 协方差和协方差矩阵的定义和理解

    先复习一下这个 xff1a 均值 标准差 方差 为什么需要协方差 xff1f 上面几个统计量看似已经描述的差不多了 xff0c 但我们应该注意到 xff0c 标准差和方差一般是用来描述一维数据的 xff0c 但现实生活我们常常遇到含有多维数
  • dockerfile 中运行 apt-get update 报错 returned a non-zero code: 100

    在 docker 中运行 apt get update 报错 returned a non zero code 100 出现问题 xff1a 在构建 docker 执行 Dockerfile 中的 RUN apt get update 时报
  • Opencv 实现简单UDP局域网实时摄像头传输 (一)

    做项目需要用到网络编程及摄像头捕捉 xff0c 经过简单学习完成一个简单的视频发送 发送端 sender cpp include 34 stdafx h 34 include 34 WinSock2 h 34 include lt open
  • 使用3D地面站(AcmeGCS)的编队飞行

    使用3D地面站 xff08 AcmeGCS xff09 的编队飞行 无人机编队飞行的方法有很多种 xff0c 本文演示一种使用PX4 43 3D地面站 AcmeGCS 43 ROS的多机控制方法 PX4提供了非常好的软件仿真环境 xff0c
  • PX4-1-开源飞控项目

    分享完工具系列 xff0c 我们开始PX4飞控技术的分享 xff0c 写分享相对于自己写笔记要难很多 xff0c 在整理自己笔记的过程中也重新思考很多问题 飞控技术的分享系列更多分享的是思路和框架 对于PX4这种大型开源项目 xff0c 源
  • PX4-3-uORB

    uORB Micro Object Request Broker 微对象请求代理器 是PX4中非常重要且关键的一个模块 xff0c 用于各个模块之间的数据交互 实际上uORB是一套跨 进程 的IPC通讯模块 在PX4中 xff0c 所有的功
  • PX4-5-SPI-IIC设备驱动

    在之前的分享中 xff0c 我们聊了PX4的通信框架和任务调度框架 xff0c 现在我们讲一下PX4的设备驱动 PX4支持很多种设备 xff0c 根据通信方式的不同大致分为 xff1a SPI IIC设备 串口设备 IO设备 CAN设备 这
  • PX4-6-串口设备驱动

    上一篇我们讲了PX4的SPI IIC设备驱动 xff0c 现在讲一下PX4的串口设备 PX4的串口设备驱动框架比SPI IIC设备简单不少 xff0c 使用了两种底层实现方式 xff1a 一种是系统自带的标准字符设备接口 xff0c 一种是
  • Uav开发杂记-4-无人机开发的C-C++

    无人机的软件开发主要使用C C 43 43 开发 xff0c APM和PX4的应用层开发更多的使用C 43 43 开发 作为叠代完善了非常多年的比较大型的开源飞控项目 xff0c 其代码框架对于刚开始接触的新手而言是比较复杂的 一些同学私信
  • AcmeIot-3-在嵌入式设备中运行ROS2

    ROS2是作为第二代ROS xff0c 对ROS1进行了重大的优化 xff0c 主要的特点有 xff1a 实现跨平台运行 xff0c 可以运行在Linux windows Mac RTOS xff0c 甚至没有操作系统的裸机 实现真正的分布
  • PX4-12-飞行任务框架

    飞行任务指的是PX4的modules flight mode manager组件 xff0c 用于控制指令平滑 PX4的FlightTask框架设计还是比较有趣的 xff0c 不论从软件架构还是控制算法方面 xff0c 都是值得好好学习的代
  • AcmeROS-2-ROS2架构

    在前面的分享中 xff0c 我们讲了 在嵌入式设备中运行ROS2 AcmeIot 3 在嵌入式设备中运行ROS2 PX4中的ROS2桥接应用 PX4 16 ROS2Bridge 在AcmeGCS中支持ROS2 AcmeGCS 18 支持RO
  • 自动驾驶控制算法-模型预测MPC

    本文记录一下MPC控制算法的学习过程和自己的理解 xff0c 初步接触控制算法 xff0c 理解肯定不是很完善 xff0c 重在记录思考的过程 背景 随着自动驾驶技术以及机器人控制技术的不断发展及逐渐火热 xff0c 模型预测控制 MPC
  • MySQL保留2位小数

    1 round x d xff0c 四舍五入 round x 其实就是round x 0 也就是默认d为0 select round 109 456 2 109 46 2 TRUNCATE x d xff0c 直接截取需要保留的小数位 se
  • PCB原理图绘制(种草立创eda)

    首先 xff0c 相对于我们平时所用的ad 这个就很适合我们英文不好的中国人了 然后这个一站式搞定 xff0c 画完商城下单就可以做我们的板子了 整个设计界面也很友好 xff0c 封装库也不需要我们自己封装 很多商城里面都有 xff0c 可
  • 操作系统学习-练习题个人总结(三)

    操作系统学习 练习题个人总结 xff08 三 xff09 第二章 操作系统硬件基础 一 第二章 中断和特权级 课前测试 1 错题解析 从用户态到内核态的转换是由 xff08 中断硬件 xff09 完成的 解析 xff1a 扩展资料 xff1
  • c++转换python返回的字符串

    PyArg Parse可以将python返回参数转换为c 43 43 类型 对于字符串转换用 xff0c 如下方法 xff1a xff08 格式必须这样 xff0c 其他方式都转换不了 xff09 char p 61 NULL PyArg