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. LVM基本概念、管理

    一.传统磁盘管理的问题 当分区大小不够用时无法扩展其大小,只能通过添加磁盘.创建新的分区来扩充空间,但是新添加进来的硬盘是作为独立文件系统存在的,原有的文件系统并未得到扩充,上层应用很多时候只能访问一 ...

  2. linux 搭建jenkins+创建maven工程JOB

    1.linux 安装jenkins 网上搜到这样安装 sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redh ...

  3. 数据库的char(n)

    Mysql中的char(n)或者varchar(n) 其中的n就是代表列,不代表字节! varchar(n)其中的n最多是65535 , 应该在创建表的同时,指定表的编码方式为latin1,因为lat ...

  4. <大学祭>

    我将20岁青涩的身影留在教室前的花坛边,远赴他乡,这些年过去了,他总是对我说别忘记我的梦: 我将那个沉静娇小的眼镜女孩印象留在第一排靠窗的座位,带着淡淡离愁而去,这些年过去了,她对我说,永恒的爱是心中 ...

  5. oop第二章1知识点汇总

    1 方法重写必须满足以下要求: 1 重写方法与被重写的方法必须方法名相同,参数列表相同. 2 重写方法与被重写的方法返回值类型必须相同或是其子类 3 重写方法不能缩小被重写方法的访问权限 2 重载和重 ...

  6. MySQL主从复制、半同步复制和主主复制

    同步,异步,半同步复制的比较: 同步复制:Master提交事务,直到事务在所有的Slave都已提交,此时才会返回客户端,事务执行完毕.缺点:完成一个事务可能会有很大的延迟. 异步复制:当Slave准备 ...

  7. git的一些指令

    1.这是一篇git.github相关具体操作的连接 http://www.cnblogs.com/fanyong/p/3424501.html 2. git remote -v 查看远程分支 git ...

  8. 20151009 C# 第一篇 基础知识

    20151009 C#:优点: 1. 语法简洁:不直接操作内存,去掉了指针操作 2. 面向对象:具有封装.继承.多态特性 3. 支持Web标准:支持HTML.XML.SOAP 4. 兼容性:遵循.Ne ...

  9. Windows 8.1 应用再出发 - 几种新增控件(1)

    Windows 8.1 新增的一些控件,分别是:AppBar.CommandBar.DatePicker.TimePicker.Flyout.MenuFlyout.SettingsFlyout.Hub ...

  10. static, readonly, const

    static Use the static modifier to declare a static member, which belongs to the type itself rather t ...