在进行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、多字节互转相关推荐

  1. C语言小算法:ACSII码(多字节)和Unicode(宽字节)互转

    C语言小算法:ACSII码(多字节)和Unicode(宽字节)互转 代码: #include <Windows.h> #include <stdio.h> #include & ...

  2. 多字节与宽字节的区别

    多字节与宽字节 string wstring 互转 多字节字符集(MBCS,Multi-Byte Chactacter Set): 指用多个字节来表示一个字符的字符编码集合.一般英文字母用1Byte, ...

  3. 宽字节 多字节 单字节 的问题

    感觉比较混乱,学习了一通,做个记录. 着急在windows下面用的话,可以先看这个: VC++ Windows平台字符透明编程大总结 http://blog.csdn.net/hellothere/a ...

  4. c++多字节与宽字节字符串转换(windows平台)

    原文网址:http://www.asarea.me/showdiary.php?id=193 许久没有写技术日志了,今天写一篇关于字符串转换的. 大家都知道,在标准c++中有string和wstrin ...

  5. A2W和W2A :很好的多字节和宽字节字符串的转换宏

    作者:朱金灿 来源:http://blog.csdn.net/clever101 以前看<Window核心编程>,感觉多字节和宽字节之间还比较麻烦的,至少MultiByteToWideCh ...

  6. 宽字节与多字节之间的转换

    string 与 wstring 相互间的转换 第一种方法 调用Windows的API函数WideCharToMultiByte()函数和MultiByteToWideChar()函数 第二种方法 使 ...

  7. 字节码:ASCII编码:单字节编码,ANSI编码:多字节编码,UNICODE编码:宽字节编码

    字符字节与编码 字符是人们常用的一些记号,比如"1", "汉", "お","℃"等等,包括各种语系的语言和一些符号都可以 ...

  8. windows下宽字节和多字节的问题

    宽字节和多字节,一度是我的噩梦,明明是调用同一个API,但是最后的返回值一会是char *,一会又是wchar_t *,实属烦人. Windows中有两种编码格式: (1) ANSI/多字节编码(基本 ...

  9. MySQL宽字节注入漏洞分析_宽字节注入

    概念 单字节字符集: 所有的字符都使用一个字节来表示,比如 ASCII 编码. 多字节字符集: 在多字节字符集中,一部分字节用多个字节来表示,另一部分(可能没有)用单个字节来表示. 两位的多字节字符有 ...

  10. mysql sql宽字节注入_sql注入之宽字节注入

    宽字节注入是因为数据库使用了GBK编码,不过现在大都使用unicode国际编码,大多数网站都使用了utf-8的编码 不过既然是sql注入的一部分,也搭建环境  做做实验 实验环境: wamp集成包 实 ...

最新文章

  1. OpenAI与GitHub联手推出AI代码生成工具,比GPT-3更强大
  2. 【Groovy】循环控制 ( Java 语法循环 | 默认的 IntRange 构造函数 | 可设置翻转属性的 IntRange 构造函数 | 可设置是否包含 to 的构造函数 | 0..9 简写 )
  3. spring beans源码解读之--Bean的注解(annotation)
  4. 盐城大数据产业园人才公寓_住在永川大数据产业园人才公寓,是一种怎样的体验?...
  5. 物体运动到一个点停止_运用SolidWorks运动仿真来做的最速降线及其验证,来看看我的办法...
  6. 新技术层出不穷,一入前端深似海!
  7. Java——枚举:优雅而干净的enum
  8. 利用资源文件实现多语言的系统
  9. 2018 蓝桥杯省赛 B 组模拟赛(五)题 F题
  10. 【优化求解】基于matlab遗传算法求解道路流量优化问题【含Matlab源码 1480期】
  11. arm linux logrotate,交叉编译zlog日志工具:zlog+cronolog+crontab+logrotate
  12. 最新稳定短视频去水印免费解析API接口分享
  13. 二叉树遍历之递归与非递归遍历
  14. Python学习笔记2:indent expected、unindent does not match any outer indentation level
  15. win10系统优化计算机,win10系统必做优化,让你的电脑告别卡顿,运行速度至少提升20%...
  16. 保温杯内壁有很多小泡泡
  17. 农历和阳历互转(c语言)
  18. PCL中的OpenNI采集卡框架(The OpenNI Grabber Framework in PCL)
  19. TcaplusDBX光与夜之恋 | 与众不同的真实恋爱
  20. 日语学习资料下载 N5—N1都有

热门文章

  1. 【渝粤教育】国家开放大学2018年春季 8636-21T实用心理学 参考试题
  2. 【渝粤题库】广东开放大学 建筑工程概预算 形成性考核
  3. 【渝粤题库】陕西师范大学209016《管理心理学》作业
  4. 【sklearn第四讲】数据集变换
  5. react 项目 测试
  6. Day14 - Ruby比一比:#each #map和#collect method
  7. 连续型随机变量量函数的期望
  8. 【C++标准库】字符串
  9. c# 线程 WPF 进度百分比(菜鸟)
  10. GoDaddy Linux主机支持机房的更换