Windows下ANSI与UTF8之间转换,wstring与string之间的转换代码片段

news/2024/4/24 15:38:46/文章来源:https://blog.csdn.net/youzai2017/article/details/128118361

Windows下ANSI与UTF8之间转换,wstring与string之间的转换代码片段

参考:multiByteToWideChar 函数 (stringapiset.h) - Win32 apps | Microsoft Learn

static std::string UTF82ANSI(const char* utf8)
{std::string str;
#if _WIN32int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);if (len <= 0)return str;wchar_t* wstr = new wchar_t[len + 1];memset(wstr, 0, len + 1);MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len);len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);char* buf = new char[len + 1];memset(buf, 0, len + 1);WideCharToMultiByte(CP_ACP, 0, wstr, -1, buf, len, NULL, NULL);str.assign(buf, len - 1);delete[] wstr;delete[] buf;
#elsestr = utf8;
#endifreturn std::move(str);
}static std::string ANSI2UTF8(const char* gb2312)
{std::string str;
#if _WIN32int len = MultiByteToWideChar(CP_ACP, 0, gb2312, -1, NULL, 0);if (len <= 0)return str;wchar_t* wstr = new wchar_t[len + 1];memset(wstr, 0, len + 1);MultiByteToWideChar(CP_ACP, 0, gb2312, -1, wstr, len);len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);char* buf = new char[len + 1];memset(buf, 0, len + 1);WideCharToMultiByte(CP_UTF8, 0, wstr, -1, buf, len, NULL, NULL);str.assign(buf, len - 1);delete[] wstr;delete[] buf;
#elsestr = gb2312;
#endifreturn std::move(str);
}

wstring与string直接转换

windows版

static std::wstring to_wide_string(std::string& strascii)
{
#ifdef _MSC_VERint widesize = MultiByteToWideChar(CP_ACP, 0, (char*)strascii.c_str(), -1, NULL, 0);	if (widesize == ERROR_NO_UNICODE_TRANSLATION){throw std::exception("Invalid UTF-8 sequence.");}if (widesize == 0){throw std::exception("Error in conversion.");}std::vector<wchar_t> resultstring(widesize);int convresult = MultiByteToWideChar(CP_ACP, 0, (char*)strascii.c_str(), -1, &resultstring[0], widesize);if (convresult != widesize){throw std::exception("La falla!");}return std::wstring(&resultstring[0]);
#endif
}static std::string to_byte_string(const std::wstring& widestring)
{ 
#ifdef _MSC_VERint utf8size = ::WideCharToMultiByte(CP_UTF8, 0, widestring.c_str(), -1, NULL, 0, NULL, NULL);if (utf8size == 0){throw std::exception("Error in conversion.");}std::vector<char> resultstring(utf8size);int convresult = ::WideCharToMultiByte(CP_UTF8, 0, widestring.c_str(), -1, &resultstring[0], utf8size, NULL, NULL);if (convresult != utf8size){throw std::exception("La falla!");}return std::string(&resultstring[0]);
#endif
}

C++11版

#include <string>
#include <locale>
#include <codecvt>// convert string to wstring
inline std::wstring to_wide_string(const std::string& input)
{std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;return converter.from_bytes(input);
}
// convert wstring to string 
inline std::string to_byte_string(const std::wstring& input)
{std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;return converter.to_bytes(input);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_39212.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Compose学习-> Text()

设置文本&#xff1a;text xxx 直接设置 Text(text "我是一个Text")引用资源文件&#xff1a;stringResource Text(text stringResource(id R.string.string_text))设置字体颜色&#xff1a;color xxx 引用系统自带的颜色 Text(text "我是一个Text"…

【毕业设计】17-基于单片机的矿井提升机_步进电机控制装置设计(原理图+仿真+源代码+实物图+答辩论文+答辩PPT)

typora-root-url: ./ 【毕业设计】17-基于单片机的矿井提升机_步进电机控制装置设计&#xff08;原理图仿真源代码实物图答辩论文答辩PPT&#xff09; 文章目录typora-root-url: ./【毕业设计】17-基于单片机的矿井提升机_步进电机控制装置设计&#xff08;原理图仿真源代码实…

C++习题2

指针调用数组元素 指针调用数组元素 int a[3][4] {{1,4,7,10},{2,5,8,11},{3,6,9,12}};int* pa[3] { a[0],a[1],a[2] };int(*pb)[4]; pb a;int** q pa;cout << *(a[2] 3)<<endl;cout << *(*(pa 2) 3)<<endl;cout << pb[2][3]<<en…

【JavaWeb】Filter

文章目录1.Filter过滤器2.Filter的初体验3.Filter的生命周期4.FilterConfig类5.FilterChain过滤器链6.Filter的拦截路径1.Filter过滤器 (1).概念及作用 Filter过滤器是JavaWeb的三大组件之一三大组件分别是:Servlet程序,Listener监听器,Filter过滤器Filter过滤器是JavaEE的规…

MBA管理类联考英语二题型答题时间及次序问题

还有不到一个月时间&#xff0c;2023年MBA联考也进入到最后的收官阶段&#xff0c;这个阶段对于多数已经系统复习过的考生&#xff0c;一般需要进行通盘梳理备考&#xff0c;而不是专注于单个模块的复习。在做试卷或真题的过程中&#xff0c;如何才能更有利于分数这个问题需要大…

闲人闲谈PS之三十五——物资备货与提前采购

惯例闲话&#xff1a;又一年快过去了&#xff0c;回想刚刚开始在CSDN上写笔记&#xff0c;还是2年前的事情。闲人其实是一个拖延症十分严重的人&#xff0c;自从开始走上写作这条路之后&#xff0c;治疗拖延症找到了办法&#xff0c;每天总有一些事情让闲人去思考&#xff0c;然…

Miniconda:在pycharm的terminal中无法使用Conda命令

在pycharm的terminal中无法使用Conda命令 问题&#xff1a; 在本地下载好conda系列后&#xff0c;在pycharm的terminal中无法使用conda命令 问题分析&#xff1a; 说的很清楚了&#xff0c;是因为当前支持的shells没有初始化conda 所以我们只需要把Shell 路径改成激活cond…

如何制作一个微信小程序【微信小程序是怎么做的】

为什么现在这么多人使用微信小程序呢&#xff1f;因为微信小程序除了便捷易开发&#xff0c;公司企业可以用来做小程序展示官网&#xff0c;商家也可以做小程序商城&#xff0c;甚至个人也可以拥有自己的小程序。那么如何制作一个微信小程序&#xff1f;微信小程序是怎么做的呢…

基于微信小程序奶茶店在线点单管理系统ssm框架-计算机毕业设计

面对目前奶茶店林立的现状&#xff0c;大城市奶茶店多为连锁奶茶店他们都有统一的管理和相应的系统。但是个别小县城和小城以及城区也有不少的奶茶店多为自营&#xff0c;这就必须店长自己管理和采购原料。大型连锁的奶茶店管理系统就不适用于分散的小型奶茶店。小型奶茶店的管…

vue开发测评系统思路及踩坑

最近公司做了一个测评系统&#xff0c;因为时间很短&#xff0c;本以为会很简单&#xff0c;没有想到踩了很多坑。 先看下部分效果图吧 然后在说下需求 1&#xff1a;所有的答案都是动态的&#xff08;例如选择是出来的是第二题&#xff0c;选择否出来的是第五题&#xff09…

如何用蓝牙实现无线定位(二)--信号塔设置

1. 配置BLE4.0模块 根据三点定位原理&#xff0c;本项目需要使用3个信号塔。3个信号塔的主体均为BLE4.0模块&#xff0c;需要把BLE4.0模块的AT指令设置为“从设备”。 方法为&#xff1a; &#xff08;1&#xff09;给控制板刷一套空的程序。初始打开arduino IDE或新建&#x…

React+Electron快速创建并打包成桌面应用

一、创建react项目 首先使用creat-react-app脚手架来创建一个react项目 # 安装 create-react-app 命令,如果已将安装请忽略 npm install -g create-react-app # 创建 react项目 create-react-app react-electron # 启动项目( create-react-app 真的超级方便啊) cd react-elec…

【电力运维】浅谈电力通信与泛在电力物联网技术的应用与发展

摘要&#xff1a;随着我国社会经济的快速发展&#xff0c;我国科技实力得到了巨大的提升&#xff0c;当前互联网通信技术在社会中得到了广泛的应用。随着电力通信技术的快速发展与更新&#xff0c;泛在电力物联网建设成为电力通讯发展的重要方向。本文已泛在电力物联网系统为核…

医院用故障电弧探测器AAFD 安科瑞 时丽花

摘 要&#xff1a; 医院运行中对于用电方面的要求越来越高&#xff0c;为了更好地体现用电价值&#xff0c;首先应该确保用电的安全性&#xff0c;尤其是对 于越来越繁杂的医院用电系统。基于此&#xff0c;在未来医院用电过程中应该加大关注力度&#xff0c;切实做好相关管理工…

Mysql:sql去重的几种方式(大数据hive也可参考)

文章目录前言准备创建表测试数据目标探索distinct 去重group by 去重实现方案方案一方案二方案三前言 我们做数据分析的时候经常会遇到去重问题&#xff0c;下面总结 sql 去重的几种方式&#xff0c;后续如果还有再补充&#xff0c;大数据分析层面包括 hive、clickhouse 也可参…

Python——变量以及基础数据类型练习题

要求&#xff1a;注意变量名的命名规范问题&#xff01;&#xff01;&#xff01;不能再出现没有意义的变量名&#xff01;&#xff01;&#xff01;一行一注释&#xff0c;用下划线命名法。 请使用相对应的数据类型&#xff0c;不能全部使用字符串&#xff01;&#xff01;&a…

Codeforces Round #574 (Div. 2) C. Basketball Exercise

翻译&#xff1a; 最后&#xff0c;SIS已经开放了一个篮球场&#xff0c;所以Demid决定举办一个篮球训练课程。有2个⋅&#x1d45b;的学生参加了Demid的练习课&#xff0c;他将他们排成两排&#xff0c;大小相同(每排正好有&#x1d45b;人)。学生按从左到右的顺序&#xff0…

数字化门店| 美业/医美门店管理系统 | 医美小程序

近些年来&#xff0c;随着人们消费升级和颜值经济的不断驱动&#xff0c;美业发展非常迅速&#xff0c;而医美行业也顺势规模增长。 当今互联网时代&#xff0c;各行业都在开展门店数字化转型&#xff0c;而这也让不少医美医院愿意构建基于门店会员管理的O2O闭环&#xff0c;并…

Web进阶

目录 DOM节点操作&#xff08;上&#xff09; 一、任务目标 二、任务背景 三、任务内容 1、DOM结构及节点 DOM节点操作&#xff08;下&#xff09; 一、任务目标 二、任务背景 三、任务内容 1、DOM修改 DOM控制CSS样式 一、任务目标 二、任务背景 三、任务内容 …

element实现el-progress线形进度条渐变色

实现效果&#xff1a; 实现前&#xff1a; 网上查progress找到的方法都是环形进度条的&#xff0c;且实现得贼复杂&#xff0c;要么封装一个新组件要么修改一串svg&#xff0c;其实线形进度条改成渐变色的方法非常简单&#xff0c;直接在css上修改就行了&#xff1a; <div…