多字节与UTF-8、Unicode之间的转换
from http://blog.csdn.net/frankiewang008/article/details/12832239
- // 多字节编码转为UTF8编码
- bool MBToUTF8(vector<char>& pu8, const char* pmb, int32 mLen)
- {
- // convert an MBCS string to widechar
- int32 nLen = MultiByteToWideChar(CP_ACP, 0, pmb, mLen, NULL, 0);
- WCHAR* lpszW = NULL;
- try
- {
- lpszW = new WCHAR[nLen];
- }
- catch(bad_alloc &memExp)
- {
- return false;
- }
- int32 nRtn = MultiByteToWideChar(CP_ACP, 0, pmb, mLen, lpszW, nLen);
- if(nRtn != nLen)
- {
- delete[] lpszW;
- return false;
- }
- // convert an widechar string to utf8
- int32 utf8Len = WideCharToMultiByte(CP_UTF8, 0, lpszW, nLen, NULL, 0, NULL, NULL);
- if (utf8Len <= 0)
- {
- return false;
- }
- pu8.resize(utf8Len);
- nRtn = WideCharToMultiByte(CP_UTF8, 0, lpszW, nLen, &*pu8.begin(), utf8Len, NULL, NULL);
- delete[] lpszW;
- if (nRtn != utf8Len)
- {
- pu8.clear();
- return false;
- }
- return true;
- }
- // UTF8编码转为多字节编码
- bool UTF8ToMB(vector<char>& pmb, const char* pu8, int32 utf8Len)
- {
- // convert an UTF8 string to widechar
- int32 nLen = MultiByteToWideChar(CP_UTF8, 0, pu8, utf8Len, NULL, 0);
- WCHAR* lpszW = NULL;
- try
- {
- lpszW = new WCHAR[nLen];
- }
- catch(bad_alloc &memExp)
- {
- return false;
- }
- int32 nRtn = MultiByteToWideChar(CP_UTF8, 0, pu8, utf8Len, lpszW, nLen);
- if(nRtn != nLen)
- {
- delete[] lpszW;
- return false;
- }
- // convert an widechar string to Multibyte
- int32 MBLen = WideCharToMultiByte(CP_ACP, 0, lpszW, nLen, NULL, 0, NULL, NULL);
- if (MBLen <=0)
- {
- return false;
- }
- pmb.resize(MBLen);
- nRtn = WideCharToMultiByte(CP_ACP, 0, lpszW, nLen, &*pmb.begin(), MBLen, NULL, NULL);
- delete[] lpszW;
- if(nRtn != MBLen)
- {
- pmb.clear();
- return false;
- }
- return true;
- }
- // 多字节编码转为Unicode编码
- bool MBToUnicode(vector<wchar_t>& pun, const char* pmb, int32 mLen)
- {
- // convert an MBCS string to widechar
- int32 uLen = MultiByteToWideChar(CP_ACP, 0, pmb, mLen, NULL, 0);
- if (uLen<=0)
- {
- return false;
- }
- pun.resize(uLen);
- int32 nRtn = MultiByteToWideChar(CP_ACP, 0, pmb, mLen, &*pun.begin(), uLen);
- if (nRtn != uLen)
- {
- pun.clear();
- return false;
- }
- return true;
- }
- //Unicode编码转为多字节编码
- bool UnicodeToMB(vector<char>& pmb, const wchar_t* pun, int32 uLen)
- {
- // convert an widechar string to Multibyte
- int32 MBLen = WideCharToMultiByte(CP_ACP, 0, pun, uLen, NULL, 0, NULL, NULL);
- if (MBLen <=0)
- {
- return false;
- }
- pmb.resize(MBLen);
- int nRtn = WideCharToMultiByte(CP_ACP, 0, pun, uLen, &*pmb.begin(), MBLen, NULL, NULL);
- if(nRtn != MBLen)
- {
- pmb.clear();
- return false;
- }
- return true;
- }
- // UTF8编码转为Unicode
- bool UTF8ToUnicode(vector<wchar_t>& pun, const char* pu8, int32 utf8Len)
- {
- // convert an UTF8 string to widechar
- int32 nLen = MultiByteToWideChar(CP_UTF8, 0, pu8, utf8Len, NULL, 0);
- if (nLen <=0)
- {
- return false;
- }
- pun.resize(nLen);
- int32 nRtn = MultiByteToWideChar(CP_UTF8, 0, pu8, utf8Len, &*pun.begin(), nLen);
- if(nRtn != nLen)
- {
- pun.clear();
- return false;
- }
- return true;
- }
- // Unicode编码转为UTF8
- bool UnicodeToUTF8(vector<char>& pu8, const wchar_t* pun, int32 uLen)
- {
- // convert an widechar string to utf8
- int32 utf8Len = WideCharToMultiByte(CP_UTF8, 0, pun, uLen, NULL, 0, NULL, NULL);
- if (utf8Len<=0)
- {
- return false;
- }
- pu8.resize(utf8Len);
- int32 nRtn = WideCharToMultiByte(CP_UTF8, 0, pun, uLen, &*pu8.begin(), utf8Len, NULL, NULL);
- if (nRtn != utf8Len)
- {
- pu8.clear();
- return false;
- }
- return true;
- }
多字节与UTF-8、Unicode之间的转换的更多相关文章
- MultiByteToWideChar和WideCharToMultiByte用法详解, ANSI和UNICODE之间的转换
//========================================================================//TITLE:// MultiByteToW ...
- C# - 汉字与unicode之间的转换
/// <summary> /// 字符串转Unicode码 /// </summary> /// <returns>The to unicode.</ret ...
- java中unicode utf-8以及汉字之间的转换工具类
1. 汉字字符串与unicode之间的转换 1.1 stringToUnicode /** * 获取字符串的unicode编码 * 汉字"木"的Uni ...
- 举例说明Unicode 和UTF-8之间的转换
1)写这篇博客的原因 首先我要感谢这篇博客,卡了很久,看完下面这篇博客终于明白Unicode怎么转换成UTF-8了. https://blog.csdn.net/qq_32252957/article ...
- Unicode和UTF-8之间的转换
转自:http://www.cnblogs.com/xdotnet/archive/2007/11/23/unicode_and_utf8.html#undefined 最近在用VC++开发一个小工具 ...
- 汉字编码(【Unicode】 【UTF-8】 【Unicode与UTF-8之间的转换】 【汉字 Unicode 编码范围】【中文标点Unicode码】【GBK编码】【批量获取汉字UNICODE码】)
Unicode与UTF-8互转(C语言实现):http://blog.csdn.net/tge7618291/article/details/7599902 汉字 Unicode 编码范围:http: ...
- python中unicode, hex, bin之间的转换
python中unicode, hex, bin之间的转换 背景 在smb中有个feature change notify, 需要改动文件权限dacl,然后确认是否有收到notify.一直得不到这个d ...
- [Python] 中文编码问题:raw_input输入、文件读取、变量比较等str、unicode、utf-8转换问题
最近研究搜索引擎.知识图谱和Python爬虫比较多,中文乱码问题再次浮现于眼前.虽然市面上讲述中文编码问题的文章数不胜数,同时以前我也讲述过PHP处理数据库服务器中文乱码问题,但是此处还是准备简单做下 ...
- CString-int-string-char-BSTR之间的转换
一.CString, int, string, char*之间的转换 string 转 CString CString.Format("%s", string.c_str());c ...
随机推荐
- 03012_会话技术Cookie&Session
1.会话技术简介 (1)存储客户端的技术 网站的购物系统,用户将购买的商品信息存储到哪里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识 ...
- leetcode 【 Subsets 】python 实现
题目: Given a set of distinct integers, S, return all possible subsets. Note: Elements in a subset mus ...
- Linux之如何进行固定IP、DNS等设置
前提:虚拟机Linux centOS6.6 Linux如何设置固定IP.dns.网关 1.切换到root账号 2.#cd /etc/sysconfig/network-scripts 进入网卡的设置 ...
- Python+Selenium练习篇之10-刷新当前页面
本文介绍如何调用webdriver中刷新页面的方法. 相关脚本代码如下: # coding=utf-8import timefrom selenium import webdriver driver ...
- outlook同步异常
新装的系统,备份了outlook,还原后发现,outlook还在不停的同步服务端邮件,设置规则,禁止接收今天之前的邮件,但是outloock还是在同步,只是不接收而已,这样导致了莫名其妙的异常错误,o ...
- ftp下出现“当前的安全设置不允许从该位置下载文件”提示
在资源管理器中使用ftp协议下载文件时,提示“当前的安全设置不允许从该位置下载文件”,下载失败. 解决方法: 1.在自己的电脑上打开Internet选项
- BZOJ 3509 [CodeChef] COUNTARI ——分块 FFT
分块大法好. 块内暴力,块外FFT. 弃疗了,抄SX队长$silvernebula$的代码 #include <map> #include <cmath> #include & ...
- Vue.js笔记 — vue-router路由懒加载
用vue.js写单页面应用时,会出现打包后的JavaScript包非常大,影响页面加载,我们可以利用路由的懒加载去优化这个问题,当我们用到某个路由后,才去加载对应的组件,这样就会更加高效,实现代码如下 ...
- IntelliJ IDEA如何导入Gradle项目
最近学习Gradle,本文来重点介绍一下,如何使用IntelliJ IDEA导入`Gradle项目的一种方法. 选择菜单栏的File->Open. 在打开的窗口选择对应Gradle项目的buil ...
- Long.ValueOf("String") Long.parseLong("String") 区别 看JAVA包装类的封箱与拆箱
IP地址类型转换原理: 将一个点分十进制IP地址字符串转换成32位数字表示的IP地址(网络字节顺序). 将一个32位数字表示的IP地址转换成点分十进制IP地址字符串. 1.Long.ParseLong ...