宽字节UTF-8、多字节互转
程序员文章站
2022-04-09 18:37:51
在进行Windows编程时,常常遇到不同字符编码之间的转换以对应不同的输出格式,本文介绍宽字节UTF-8编码格式和多字节之间的项目转换。分别调用Windows底层函数MultiByteToWideChar和 WideCharToMultiByte实现。 1.UTF-8转多字节 2.多字节转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 ; }
下一篇: C++ 输入输出重定向
推荐阅读
-
应用宝封禁多闪后续 字节跳动副总裁:“鬼子”藏得深
-
js实现unicode码字符串与utf8字节数据互转详解
-
JS失效 提示HTML1114: (UNICODE 字节顺序标记)的代码页 utf-8 覆盖(META 标记)的冲突的代码页 utf-8
-
PHP 双字节、宽字节编码漏洞
-
飞聊停运多闪并入抖音,字节社交按下暂停键
-
com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException :1字节的 UTF-8 序列的字节 1 无效
-
Exception: 3 字节的 UTF-8 序列的字节 2 无效. 异常的解决办法
-
宽字节UTF-8、多字节互转
-
Web网络安全解析宽字节注入攻击原理
-
utf-8 下汉字为什么需要三个字节