string GBKToUTF8(const std::string& strGBK)
{
int nLen = MultiByteToWideChar(CP_ACP, , strGBK.c_str(), -, NULL, );
WCHAR * wszUTF8 = new WCHAR[nLen];
MultiByteToWideChar(CP_ACP, , strGBK.c_str(), -, wszUTF8, nLen); nLen = WideCharToMultiByte(CP_UTF8, , wszUTF8, -, NULL, , NULL, NULL);
char * szUTF8 = new char[nLen];
WideCharToMultiByte(CP_UTF8, , wszUTF8, -, szUTF8, nLen, NULL, NULL); std::string strTemp(szUTF8);
delete[]wszUTF8;
delete[]szUTF8;
return strTemp;
}
 string UTF8ToGBK(const std::string& strUTF8)
{
int nLen = MultiByteToWideChar(CP_UTF8, , strUTF8.c_str(), -, NULL, );
unsigned short * wszGBK = new unsigned short[nLen + ];
memset(wszGBK, , nLen * + );
MultiByteToWideChar(CP_UTF8, , strUTF8.c_str(), -, (LPWSTR)wszGBK, nLen); nLen = WideCharToMultiByte(CP_ACP, , (LPWSTR)wszGBK, -, NULL, , NULL, NULL);
char *szGBK = new char[nLen + ];
memset(szGBK, , nLen + );
WideCharToMultiByte(CP_ACP,, (LPWSTR)wszGBK, -, szGBK, nLen, NULL, NULL); std::string strTemp(szGBK);
delete[]szGBK;
delete[]wszGBK;
return strTemp;
}
 std::string Gbk2Unicode(std::string &strValue)
{
std::string strReturn;
unsigned char chTemp;
int nLength = strValue.length()*+;
WCHAR *pwchBuf = new WCHAR[nLength];
memset(pwchBuf, , sizeof(WCHAR) * nLength); MultiByteToWideChar(CP_ACP, , strValue.c_str(), -, (LPWSTR)pwchBuf, nLength); for (size_t i = ; i < wcslen(pwchBuf); i++)
{
strReturn += "\\u";
chTemp = *((unsigned char*)pwchBuf+i*+);
if(chTemp)
{
strReturn += m_clsmyOpenssl.char_to_hex( (unsigned char)(chTemp >> ) );
strReturn += m_clsmyOpenssl.char_to_hex( (unsigned char)(chTemp % ) );
}
chTemp = *((unsigned char*)pwchBuf+i*);
strReturn += m_clsmyOpenssl.char_to_hex( (unsigned char)(chTemp >> ) );
strReturn += m_clsmyOpenssl.char_to_hex( (unsigned char)(chTemp % ) );
}
delete[]pwchBuf;
pwchBuf = NULL;
return strReturn;
}
 std::string Unicode2GBK(std::string &strValue)
{
std::vector<std::string> vcString;
MyTools::SplitString(strValue, "\\u", vcString); wchar_t* pwBuf = new wchar_t[strValue.length() + ];
memset(pwBuf, , (strValue.length() + )* sizeof(wchar_t)); int j(); for(std::vector<std::string>::iterator it = vcString.begin(); it != vcString.end(); ++it)
{
if (it->empty())
{
continue;
}
unsigned short wcTmp = ;
unsigned char cTmp = ; //因为有中文字符混合ASSCII码情况,所以条件为k < it->length()
for(size_t k = ; k < it->length(); ++k)
{
cTmp = (unsigned char)(*it)[k]; if(cTmp <= '')//0x30~0x39 即0~9
{
wcTmp |= (cTmp & 0x0f) << (it->length() - k - ) * ;
}
else if(cTmp >= 'a')//0x61~7a 即a~z
{
wcTmp |= (cTmp - 0x57) << (it->length() - k - ) * ;
}
else//0x41~5a 即A~Z
{
wcTmp |= (cTmp - 0x37) << (it->length() - k - ) * ;
}
}
pwBuf[j++] = (wchar_t)wcTmp;
}
char *pDst = new char[strValue.length() + ];
memset(pDst, , (strValue.length() + ) * sizeof(char)); WideCharToMultiByte(CP_ACP, , pwBuf, -, (char*)pDst, strValue.length() - , NULL, NULL);
std::string strRet(pDst); delete[]pwBuf;
pwBuf= NULL; delete[]pDst;
pDst=NULL; return strRet;
}

GBK、UTF8、UNICODE编码转换的更多相关文章

  1. 多字节(一般指GBK) utf8 Unicode 编码互转

    // c:\Program Files\Microsoft SDKs\Windows\v7.0A\Include\WinNls.h #define CP_ACP 0 // default to ANS ...

  2. 转换编码,将Unicode编码转换成可以浏览的utf-8编码

    //转换编码,将Unicode编码转换成可以浏览的utf-8编码 public function unicodeDecode($name) { $pattern = '/([\w]+)|(\\\u([ ...

  3. Qt中文编码和QString类Unicode编码转换

      版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/g423tgl234/article ...

  4. C#中文和UNICODE编码转换

    C#中文和UNICODE编码转换 //中文轉為UNICODE string str = "中文"; string outStr = ""; if (!strin ...

  5. MySQL 解决 emoji表情 的方法,使用utf8mb4 字符集(4字节 UTF-8 Unicode 编码)

    p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'; color: #454545} span.s1 {font: ...

  6. Unicode编码转换, MD5加密,URL16进制加密解密

    一.站长网址:http://www.msxindl.com/ 1.Unicode与中文互转 16进制Unicode编码转换.还原   :http://www.msxindl.com/tools/uni ...

  7. GBK/ UTF-8/ UNICODE(字符编码)

    在python2中:如果执行程序,在编译器中,因为默认的编码是ASCII码(英文),所以如果输入中文就会出现乱码,因此为了避免这种乱码的情况发生,在输入中文字符串之后,必须进行手动转码,将GBK/ U ...

  8. gbk转utf-8 iconv 编码转换

    linux以下有时候 字符须要进行编码转换(爬虫将gbk转为utf-8编码...).一般能够选择iconv函数. 终端以下  输入 man 3 iconv 得到  iconv函数的用法. 个人看习惯了 ...

  9. Java用native2ascii命令做unicode编码转换

    背景:在做Java开发的时候,常常会出现一些乱码,或者无法正确识别或读取的文件,比如常见的validator验证用的消息资源(properties)文件就需要进行Unicode重新编码.原因是java ...

  10. GBK与Unicode的转换

    一.GBK转换到Unicode编码 std::string Gbk2Unicode(std::string &strValue) { std::string strReturn; unsign ...

随机推荐

  1. nginx配置文件nginx.conf超详细讲解

    #nginx进程,一般设置为和cpu核数一样worker_processes 4;                        #错误日志存放目录 error_log  /data1/logs/er ...

  2. js中判断输入的数字是否是数值类型

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 30.0px Consolas; color: #2b7ec3 } p.p2 { margin: 0.0px ...

  3. Mac上创建cocos2d-x工程

    1.自选版本-下载 http://www.cocos2d-x.org/download 2.解压(自选路径) 3.在cocos2d-x解压目录下新建 Projects 文件夹. 3.打开终端 4.进入 ...

  4. springmvc之interceptor(拦截器)

    1.自定义MyInterceptor impletments HandlerInterceptor public class MyInterceptor implements HandlerInter ...

  5. HTML之DOM

    对于B/S开发,客户端与服务器端的交互是非常必要的,JavaScript的提出解决了很多问题,AJAX的提出也解决了异步通信的问题,更加为用户着想了.而DOM是其中非常基础的知识,在学习AJAX的同时 ...

  6. Hibernate关联关系配置(一对多、一对一和多对多)

    第一种关联关系:一对多(多对一) "一对多"是最普遍的映射关系,简单来讲就如消费者与订单的关系. 一对多:从消费者角的度来说一个消费者可以有多个订单,即为一对多. 多对一:从订单的 ...

  7. C++混合编程之idlcpp教程Lua篇(4)

    上一篇在这  C++混合编程之idlcpp教程Lua篇(3) 与前面的工程相似,工程LuaTutorial2中,同样加入了三个文件 LuaTutorial2.cpp, Tutorial2.i, tut ...

  8. SQLSERVER 2012之AlwaysOn -- 同步模式下的网卡性能优化

    本文是基于上一篇<SQLServer 2012之AlwaysOn -- 指定数据同步链路,消除网络抖动导致的提交延迟问题>的问题继续进行优化:具体背景请参照上文:     前后折腾了一个多 ...

  9. Zynga 开源其服务器性能监控分析工具 zPerfmon

    流年不利的社交游戏服务商Zynga近日在官方博客宣布开源zPerfmon——该工具负责监控Zynga数以千计的社交游戏服务器.zPerfmon的源代码目前已经上传至Github. 包括Facebook ...

  10. MongoDB新增及查询数据(一)

    新增操作    insert函数会添加一个文档到集合里面.例如我们要登记一个人的信息,首先我们在shell力创建一个局部变量person,其记录了人的姓名和性别,我们通过db.persons.inse ...