GBK与Unicode的转换
一、GBK转换到Unicode编码
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;
}
二、Unicode转换到GBK编码
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与Unicode的转换的更多相关文章
- Qt中文编码和QString类Unicode编码转换
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/g423tgl234/article ...
- 浅谈ASCII 、ISO8859-1、GB2312、GBK、Unicode、UTF-8 的区别。
浅谈ASCII .ISO8859-1.GB2312.GBK.Unicode.UTF-8 的区别. 首先,先科普一下什么是字符编码.字符是指一种语言中使用的基本实体,比如英文中的26个英文字母,标点符号 ...
- C#中文和UNICODE编码转换
C#中文和UNICODE编码转换 //中文轉為UNICODE string str = "中文"; string outStr = ""; if (!strin ...
- 转换编码,将Unicode编码转换成可以浏览的utf-8编码
//转换编码,将Unicode编码转换成可以浏览的utf-8编码 public function unicodeDecode($name) { $pattern = '/([\w]+)|(\\\u([ ...
- 多字节(一般指GBK) utf8 Unicode 编码互转
// c:\Program Files\Microsoft SDKs\Windows\v7.0A\Include\WinNls.h #define CP_ACP 0 // default to ANS ...
- Unicode字符转换成字符串
/*** * Unicode字符转换成字符串 * @param str * Unicode字符 * @return * String * * @author WXW */ public static ...
- Linux中将一个GBK编码的文件转换成UTF-8编码文件
Linux中将一个GBK编码的文件转换成UTF-8编码文件 使用iconv 命令iconv -f GBK -t UTF-8 file1 -o file2 输出另一个文件,然后再覆盖源文件内容
- Unicode编码转换, MD5加密,URL16进制加密解密
一.站长网址:http://www.msxindl.com/ 1.Unicode与中文互转 16进制Unicode编码转换.还原 :http://www.msxindl.com/tools/uni ...
- java Unicode、ISO-8859-1、GBK、UTF-8编码转换深入浅出
参考文献:搞懂ASCII, ISO8859-1, ANSI和Unicode Unicode百度文献 ISO-8859-1百度文献 注: 1.utf-8虽然是国际编码,对不同范围的字符使用不同长度的编码 ...
随机推荐
- ubuntu19.04 redis启动和停止及连接
1.启动停止 如果以(sudo apt install redis-server)方式安装 启动: sudo srevice redis start 停止: sudo srevice redi ...
- Codeforces1295D. Same GCDs (欧拉函数)
https://codeforces.com/contest/1295/problem/D 设gcd(a,m)= n,那么找gcd(a +x ,m)= n个数,其实就等于找gcd((a+x)/n,m/ ...
- python面试的100题(16)
Python高级 元类 42.Python中类方法.类实例方法.静态方法有何区别? 类方法: 是类对象的方法,在定义时需要在上方使用 @classmethod 进行装饰,形参为cls,表示类对象,类对 ...
- jdk8-》lambda
lambda表达式 使⽤场景(前提):⼀个接⼝中只包含⼀个⽅法,则可以使⽤Lambda表达式,这样的接⼝称之为“函数接⼝” 语法: (params) -> expression 第⼀部分为括 ...
- jQuery的主要使用方法
一.在html中添加jquery,可以使用cdn加载jquery 1.网址:https://www.bootcdn.cn/jquery/ 2.推荐使用3.4左右版本的,建议使用min.js后缀的,mi ...
- (ghrd)pio设置
设置中是下降沿,边沿触发.
- mysql(3):锁和事务
MySQL锁的介绍 锁是数据库系统区别于文件系统的一个关键特性.锁机制用于管理对共享资源的并发访问. 表级锁 例如MyISAM引擎,其锁是表锁设计.并发情况下的读没有问题,但是并发插入时的性能要差一些 ...
- MYSQL获取表空间大小
SELECT table_name AS "Table", round(((data_length + index_length) / 1024 / 1024), 2) as si ...
- Go操作Elasticsearch
文章转自 Elasticsearch Elasticsearch 下载 https://www.elastic.co/cn/start 运行 解压后cd到解压目录 ./bin/elasticsea ...
- MySQL8.0服务启动(windows10)
mysql下载地址:https://dev.mysql.com/downloads/mysql/ 根目录下配置文件:my.ini [mysqld]# 设置3306端口port=3306# 设置mysq ...