from http://blog.csdn.net/frankiewang008/article/details/12832239

  1. // 多字节编码转为UTF8编码
  2. bool MBToUTF8(vector<char>& pu8, const char* pmb, int32 mLen)
  3. {
  4. // convert an MBCS string to widechar
  5. int32 nLen = MultiByteToWideChar(CP_ACP, 0, pmb, mLen, NULL, 0);
  6. WCHAR* lpszW = NULL;
  7. try
  8. {
  9. lpszW = new WCHAR[nLen];
  10. }
  11. catch(bad_alloc &memExp)
  12. {
  13. return false;
  14. }
  15. int32 nRtn = MultiByteToWideChar(CP_ACP, 0, pmb, mLen, lpszW, nLen);
  16. if(nRtn != nLen)
  17. {
  18. delete[] lpszW;
  19. return false;
  20. }
  21. // convert an widechar string to utf8
  22. int32 utf8Len = WideCharToMultiByte(CP_UTF8, 0, lpszW, nLen, NULL, 0, NULL, NULL);
  23. if (utf8Len <= 0)
  24. {
  25. return false;
  26. }
  27. pu8.resize(utf8Len);
  28. nRtn = WideCharToMultiByte(CP_UTF8, 0, lpszW, nLen, &*pu8.begin(), utf8Len, NULL, NULL);
  29. delete[] lpszW;
  30. if (nRtn != utf8Len)
  31. {
  32. pu8.clear();
  33. return false;
  34. }
  35. return true;
  36. }
  37. // UTF8编码转为多字节编码
  38. bool UTF8ToMB(vector<char>& pmb, const char* pu8, int32 utf8Len)
  39. {
  40. // convert an UTF8 string to widechar
  41. int32 nLen = MultiByteToWideChar(CP_UTF8, 0, pu8, utf8Len, NULL, 0);
  42. WCHAR* lpszW = NULL;
  43. try
  44. {
  45. lpszW = new WCHAR[nLen];
  46. }
  47. catch(bad_alloc &memExp)
  48. {
  49. return false;
  50. }
  51. int32 nRtn = MultiByteToWideChar(CP_UTF8, 0, pu8, utf8Len, lpszW, nLen);
  52. if(nRtn != nLen)
  53. {
  54. delete[] lpszW;
  55. return false;
  56. }
  57. // convert an widechar string to Multibyte
  58. int32 MBLen = WideCharToMultiByte(CP_ACP, 0, lpszW, nLen, NULL, 0, NULL, NULL);
  59. if (MBLen <=0)
  60. {
  61. return false;
  62. }
  63. pmb.resize(MBLen);
  64. nRtn = WideCharToMultiByte(CP_ACP, 0, lpszW, nLen, &*pmb.begin(), MBLen, NULL, NULL);
  65. delete[] lpszW;
  66. if(nRtn != MBLen)
  67. {
  68. pmb.clear();
  69. return false;
  70. }
  71. return true;
  72. }
  73. // 多字节编码转为Unicode编码
  74. bool MBToUnicode(vector<wchar_t>& pun, const char* pmb, int32 mLen)
  75. {
  76. // convert an MBCS string to widechar
  77. int32 uLen = MultiByteToWideChar(CP_ACP, 0, pmb, mLen, NULL, 0);
  78. if (uLen<=0)
  79. {
  80. return false;
  81. }
  82. pun.resize(uLen);
  83. int32 nRtn = MultiByteToWideChar(CP_ACP, 0, pmb, mLen, &*pun.begin(), uLen);
  84. if (nRtn != uLen)
  85. {
  86. pun.clear();
  87. return false;
  88. }
  89. return true;
  90. }
  91. //Unicode编码转为多字节编码
  92. bool UnicodeToMB(vector<char>& pmb, const wchar_t* pun, int32 uLen)
  93. {
  94. // convert an widechar string to Multibyte
  95. int32 MBLen = WideCharToMultiByte(CP_ACP, 0, pun, uLen, NULL, 0, NULL, NULL);
  96. if (MBLen <=0)
  97. {
  98. return false;
  99. }
  100. pmb.resize(MBLen);
  101. int nRtn = WideCharToMultiByte(CP_ACP, 0, pun, uLen, &*pmb.begin(), MBLen, NULL, NULL);
  102. if(nRtn != MBLen)
  103. {
  104. pmb.clear();
  105. return false;
  106. }
  107. return true;
  108. }
  109. // UTF8编码转为Unicode
  110. bool UTF8ToUnicode(vector<wchar_t>& pun, const char* pu8, int32 utf8Len)
  111. {
  112. // convert an UTF8 string to widechar
  113. int32 nLen = MultiByteToWideChar(CP_UTF8, 0, pu8, utf8Len, NULL, 0);
  114. if (nLen <=0)
  115. {
  116. return false;
  117. }
  118. pun.resize(nLen);
  119. int32 nRtn = MultiByteToWideChar(CP_UTF8, 0, pu8, utf8Len, &*pun.begin(), nLen);
  120. if(nRtn != nLen)
  121. {
  122. pun.clear();
  123. return false;
  124. }
  125. return true;
  126. }
  127. // Unicode编码转为UTF8
  128. bool UnicodeToUTF8(vector<char>& pu8, const wchar_t* pun, int32 uLen)
  129. {
  130. // convert an widechar string to utf8
  131. int32 utf8Len = WideCharToMultiByte(CP_UTF8, 0, pun, uLen, NULL, 0, NULL, NULL);
  132. if (utf8Len<=0)
  133. {
  134. return false;
  135. }
  136. pu8.resize(utf8Len);
  137. int32 nRtn = WideCharToMultiByte(CP_UTF8, 0, pun, uLen, &*pu8.begin(), utf8Len, NULL, NULL);
  138. if (nRtn != utf8Len)
  139. {
  140. pu8.clear();
  141. return false;
  142. }
  143. return true;
  144. }

多字节与UTF-8、Unicode之间的转换的更多相关文章

  1. MultiByteToWideChar和WideCharToMultiByte用法详解, ANSI和UNICODE之间的转换

    //========================================================================//TITLE://    MultiByteToW ...

  2. C# - 汉字与unicode之间的转换

    /// <summary> /// 字符串转Unicode码 /// </summary> /// <returns>The to unicode.</ret ...

  3. java中unicode utf-8以及汉字之间的转换工具类

    1.       汉字字符串与unicode之间的转换 1.1          stringToUnicode /** * 获取字符串的unicode编码 * 汉字"木"的Uni ...

  4. 举例说明Unicode 和UTF-8之间的转换

    1)写这篇博客的原因 首先我要感谢这篇博客,卡了很久,看完下面这篇博客终于明白Unicode怎么转换成UTF-8了. https://blog.csdn.net/qq_32252957/article ...

  5. Unicode和UTF-8之间的转换

    转自:http://www.cnblogs.com/xdotnet/archive/2007/11/23/unicode_and_utf8.html#undefined 最近在用VC++开发一个小工具 ...

  6. 汉字编码(【Unicode】 【UTF-8】 【Unicode与UTF-8之间的转换】 【汉字 Unicode 编码范围】【中文标点Unicode码】【GBK编码】【批量获取汉字UNICODE码】)

    Unicode与UTF-8互转(C语言实现):http://blog.csdn.net/tge7618291/article/details/7599902 汉字 Unicode 编码范围:http: ...

  7. python中unicode, hex, bin之间的转换

    python中unicode, hex, bin之间的转换 背景 在smb中有个feature change notify, 需要改动文件权限dacl,然后确认是否有收到notify.一直得不到这个d ...

  8. [Python] 中文编码问题:raw_input输入、文件读取、变量比较等str、unicode、utf-8转换问题

    最近研究搜索引擎.知识图谱和Python爬虫比较多,中文乱码问题再次浮现于眼前.虽然市面上讲述中文编码问题的文章数不胜数,同时以前我也讲述过PHP处理数据库服务器中文乱码问题,但是此处还是准备简单做下 ...

  9. CString-int-string-char-BSTR之间的转换

    一.CString, int, string, char*之间的转换 string 转 CString CString.Format("%s", string.c_str());c ...

随机推荐

  1. 谈一谈Tomcat中webSocket,Jetty WebSocket 和Spring WebSocket以及github中Java-WebSocket.jar分别对Socket协议的角色定位以及效果的不同点;

    开局先上一张图:(http://tomcat.apache.org/tomcat-7.0-doc/web-socket-howto.html)   当前截图来自于apache的tomcat官网(问:为 ...

  2. service-worker实践

    service-worker虽然已列入标准,但是支持的浏览器还是有限制,还有比较多的问题. 1. 生命周期 注册成功-------installing--------------> 安装成功(i ...

  3. Dataflow编程模型和spark streaming结合

    Dataflow编程模型和spark streaming结合 主要介绍一下Dataflow编程模型的基本思想,后面再简单比较一下Spark  streaming的编程模型 == 是什么 == 为用户提 ...

  4. 微信公众开发api接口

      简介 微信公众平台消息接口为开发者提供了一种新的消息处理方式.微信公众平台消息接口为开发者提供与用户进行消息交互的能力.对于成功接入消息接口的微信公众账号,当用户发消息给公众号,微信公众平台服务器 ...

  5. 简单实现nodejs爬虫工具

    约30行代码实现一个简单nodejs爬虫工具,定时抓取网页数据. 使用npm模块 request---简单http请求客户端.(轻量级) fs---nodejs文件模块.   index.js var ...

  6. python 学习分享-函数篇

    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创建函数,这 ...

  7. Leetcode 546.移除盒子

    移除盒子 给出一些不同颜色的盒子,盒子的颜色由数字表示,即不同的数字表示不同的颜色.你将经过若干轮操作去去掉盒子,直到所有的盒子都去掉为止.每一轮你可以移除具有相同颜色的连续 k 个盒子(k > ...

  8. jira从windows迁移到linux

    说明:迁移的就是 jira安装路径/atlassian/jira/atlassian-jira/WEB-INF/classes/jira-application.properties文件中的jira_ ...

  9. [HDU3480] Division [四边形不等式dp]

    题面: 传送门 思路: 因为集合可以无序选择,所以我们先把输入数据排个序 然后发先可以动归一波 设$dp\left[i\right]\left[j\right]$表示前j个数中分了i个集合,$w\le ...

  10. [canvas入坑2]模糊效果

    查看效果请到 http://philippica.github.io/  点击blur 模糊效果比较好的应该是高斯模糊,一个点的值变成了以该点为圆心的一个圆内所有像素的加权平均,权重由二维正态分布计算 ...