宽字节UTF-8、多字节互转
在进行Windows编程时,常常遇到不同字符编码之间的转换以对应不同的输出格式,本文介绍宽字节UTF-8编码格式和多字节之间的项目转换。分别调用Windows底层函数MultiByteToWideChar和 WideCharToMultiByte实现。
1.UTF-8转多字节
std::string u82mb(const char* cont) {if (NULL == cont){return "";}int num = MultiByteToWideChar(CP_UTF8, NULL, cont, -1, NULL, NULL);if (num <= 0){return "";}wchar_t* buffw = new (std::nothrow) wchar_t[num];if (NULL == buffw){return "";}MultiByteToWideChar(CP_UTF8, NULL, cont, -1, buffw, num);int len = WideCharToMultiByte(CP_ACP, 0, buffw, num - 1, NULL, NULL, NULL, NULL);if (len <= 0){delete[] buffw;return "";}char* lpsz = new (std::nothrow) char[len + 1]; if (NULL == lpsz){delete[] buffw;return "";}WideCharToMultiByte(CP_ACP, 0, buffw, num - 1, lpsz, len, NULL, NULL);lpsz[len]='\0';delete[] buffw;std::string rtn(lpsz);delete[] lpsz;return rtn; }
2.多字节转UTF-8
std::string mb2u8(const char* cont) {if (NULL == cont){return "";}int num = MultiByteToWideChar(CP_ACP, NULL, cont, -1, NULL, NULL);if (num <= 0){return "";}wchar_t* buffw = new (std::nothrow) wchar_t[num];if (NULL == buffw){return "";}MultiByteToWideChar(CP_ACP, NULL, cont, -1, buffw, num);int len = WideCharToMultiByte(CP_UTF8, 0, buffw, num - 1, NULL, NULL, NULL, NULL); if (len <= 0){delete[] buffw;return "";}char* lpsz = new (std::nothrow) char[len + 1]; if (NULL == lpsz){delete[] buffw;return "";}WideCharToMultiByte(CP_UTF8, 0, buffw, num - 1, lpsz, len, NULL, NULL);lpsz[len]='\0';delete[] buffw;std::string rtn(lpsz);delete[] lpsz;return rtn ; }
转载于:https://www.cnblogs.com/wanlu/p/9542839.html
宽字节UTF-8、多字节互转相关推荐
- C语言小算法:ACSII码(多字节)和Unicode(宽字节)互转
C语言小算法:ACSII码(多字节)和Unicode(宽字节)互转 代码: #include <Windows.h> #include <stdio.h> #include & ...
- 多字节与宽字节的区别
多字节与宽字节 string wstring 互转 多字节字符集(MBCS,Multi-Byte Chactacter Set): 指用多个字节来表示一个字符的字符编码集合.一般英文字母用1Byte, ...
- 宽字节 多字节 单字节 的问题
感觉比较混乱,学习了一通,做个记录. 着急在windows下面用的话,可以先看这个: VC++ Windows平台字符透明编程大总结 http://blog.csdn.net/hellothere/a ...
- c++多字节与宽字节字符串转换(windows平台)
原文网址:http://www.asarea.me/showdiary.php?id=193 许久没有写技术日志了,今天写一篇关于字符串转换的. 大家都知道,在标准c++中有string和wstrin ...
- A2W和W2A :很好的多字节和宽字节字符串的转换宏
作者:朱金灿 来源:http://blog.csdn.net/clever101 以前看<Window核心编程>,感觉多字节和宽字节之间还比较麻烦的,至少MultiByteToWideCh ...
- 宽字节与多字节之间的转换
string 与 wstring 相互间的转换 第一种方法 调用Windows的API函数WideCharToMultiByte()函数和MultiByteToWideChar()函数 第二种方法 使 ...
- 字节码:ASCII编码:单字节编码,ANSI编码:多字节编码,UNICODE编码:宽字节编码
字符字节与编码 字符是人们常用的一些记号,比如"1", "汉", "お","℃"等等,包括各种语系的语言和一些符号都可以 ...
- windows下宽字节和多字节的问题
宽字节和多字节,一度是我的噩梦,明明是调用同一个API,但是最后的返回值一会是char *,一会又是wchar_t *,实属烦人. Windows中有两种编码格式: (1) ANSI/多字节编码(基本 ...
- MySQL宽字节注入漏洞分析_宽字节注入
概念 单字节字符集: 所有的字符都使用一个字节来表示,比如 ASCII 编码. 多字节字符集: 在多字节字符集中,一部分字节用多个字节来表示,另一部分(可能没有)用单个字节来表示. 两位的多字节字符有 ...
- mysql sql宽字节注入_sql注入之宽字节注入
宽字节注入是因为数据库使用了GBK编码,不过现在大都使用unicode国际编码,大多数网站都使用了utf-8的编码 不过既然是sql注入的一部分,也搭建环境 做做实验 实验环境: wamp集成包 实 ...
最新文章
- OpenAI与GitHub联手推出AI代码生成工具,比GPT-3更强大
- 【Groovy】循环控制 ( Java 语法循环 | 默认的 IntRange 构造函数 | 可设置翻转属性的 IntRange 构造函数 | 可设置是否包含 to 的构造函数 | 0..9 简写 )
- spring beans源码解读之--Bean的注解(annotation)
- 盐城大数据产业园人才公寓_住在永川大数据产业园人才公寓,是一种怎样的体验?...
- 物体运动到一个点停止_运用SolidWorks运动仿真来做的最速降线及其验证,来看看我的办法...
- 新技术层出不穷,一入前端深似海!
- Java——枚举:优雅而干净的enum
- 利用资源文件实现多语言的系统
- 2018 蓝桥杯省赛 B 组模拟赛(五)题 F题
- 【优化求解】基于matlab遗传算法求解道路流量优化问题【含Matlab源码 1480期】
- arm linux logrotate,交叉编译zlog日志工具:zlog+cronolog+crontab+logrotate
- 最新稳定短视频去水印免费解析API接口分享
- 二叉树遍历之递归与非递归遍历
- Python学习笔记2:indent expected、unindent does not match any outer indentation level
- win10系统优化计算机,win10系统必做优化,让你的电脑告别卡顿,运行速度至少提升20%...
- 保温杯内壁有很多小泡泡
- 农历和阳历互转(c语言)
- PCL中的OpenNI采集卡框架(The OpenNI Grabber Framework in PCL)
- TcaplusDBX光与夜之恋 | 与众不同的真实恋爱
- 日语学习资料下载 N5—N1都有