window s下ANSI 、Unicod e、UTF-8编码转换1几种编码方式的说明
1ANSI 一般的txt编码都是AN SI 可以通过另存为指定其它编码方式在c/c++中的c har 、 unsign ed char等均属于该类型
2Unicod e 分为UTF-8、UTF-16和UTF-32一般在Win dows里面提到Unicode编码方式默认指的是UTF-16
1UTF-8使用1-4字节来表示字符常用的ASC II字符使用1字节汉字一般都是3字节
2UTF-16统一使用2字节表示所有字符不考虑所谓的代理 现在广泛的应用于Windows系统
3UTF-32统一使用4字节表示所有字符。
2转换前准备string、wstrin g #includ e<string>c out、 wc o utcha r、 wc ha r_t
使用wcou t输出wst ring时需要加上setlocale(LC_ALL, ".936");
设置输出窗口的编码方式否则无法输出 。
3编码转换
采用Wind ows提供的API接口函数MultiByte To Wide Char和
MultiByteTo Wi deChar来实现便慢慢转换程序如下
1 ANSI和U nicode的相互转换Window s下Unic ode指的是UTF-16void string2wstring(const string&_str,wstring&_wstr)
{if(_str=="")r e turn;
_wstr=L"";int wlen=MultiByteToWide Char(CP_ACP,0,_str.c_str(), -1,NULL,0);wchar_t*pwc=new wchar_t[wlen];mems et( (char*)pwc,0,wlen*2);
MultiByte ToWide Char(CP_ACP,0,_str.c_str(), -1,pwc,wlen);
_ws tr=pwc;
/*unsigned char*p=(unsigned char*)pwc;for( int i=0; i<wlen*2;++i)c out<<uppercase<<hex<<int(p[i])<<" ";cout<<endl;*/delete[]pwc;
}
2 Unicod e转向ANS I
string&wstring2 string(c onst wstring&_wstr, string&_str)
{if(_wstr==L"")re turn_str;
int len=Wide CharToMultiByte(CP_ACP,0,_wstr.c_str(), -1,NULL,0,NULL,NULL);unsigned char*pc=new unsigned char[len];memset(pc,0, len);
Wi de CharTo MultiByte(CP_ACP,0,_wstr.c_str(), -1, (char*)pc, len,NULL,NULL);
_str=(c har*)pc;
/*for( int i=0; i<len;++i )cout<<uppercase<<hex<<int(pc[i])<<" ";cout<<endl;*/delete[]pc;re turn_str;
}
3 utf-8转向uni code注意utf-8文本的开头会有0xEF、 0xBB和0xBF作为标记void UTF8 string2wstring(const string&_str,wstring&_wstr)
{if(_str=="")r e turn;string str;if(_str.size()>3&&
(uns i gne d c har)_s tr[0]==0 xEF&&
(unsigned char)_str[1]==0xBB&&
(unsigned char)_str[2]==0xBF)str=_str.substr(3);elsestr=_str;
_wstr=L"";int len=_str.size()+1;int wlen=MultiByteToWide Char(CP_UTF8,0, str.c_str(), -1,NULL,0);wchar_t*pwc=new wchar_t[wlen];mems et( (char*)pwc,0,wlen*2);
MultiByte ToWide Char(CP_UTF 8,0,str.c_str(), -1,pwc,wlen);
_ws tr=pwc;
/*unsigned char*p=(unsigned char*)pwc;for( int i=0; i<wlen*2;++i)
c out<<uppercase<<hex<<int(p[i])<<" ";cout<<endl;
*/delete[]pwc;
}
4Unico d e转向UTF-8Unico d e文本的开头是0xFF和0xFEstring&wstring2utf8string(c onst wstring&_wstr, string&_str)
{if(_wstr==L"")re turn_str;
int len=WideCharToMultiByte(CP_UTF8,0,_wstr.c_str(), -1,NULL,0,NULL,NULL);unsigned char*pc=new unsigned char[len];memset(pc,0, len);
Wide CharToMultiByte(CP_UTF 8,0,_wstr.c_str(), -1, (char*)pc, len,NULL,NULL);
_str=(c har*)pc;
/*for( int i=0; i<len;++i )cout<<uppercase<<hex<<int(pc[i])<<" ";cout<<endl;*/delete[]pc;re turn_str;
}
天上云服务器怎么样?天上云是国人商家,成都天上云网络科技有限公司,专注于香港、美国海外云服务器的产品,有多年的运维维护经验。世界这么大 靠谱最重,我们7*24H为您提供服务,贴心售后服务,安心、省事儿、稳定、靠谱。目前,天上云香港大带宽物理机服务器572元;20Mbps带宽!三网CN2线路,香港沙田数据中心!点击进入:天上云官方网站地址香港沙田数据中心!线路说明 :去程中国电信CN2 +中国联通+...
LOCVPS(全球云)发布了新上韩国机房KVM架构主机信息,提供流量和带宽方式,适用全场8折优惠码,优惠码最低2G内存套餐月付仅44元起。这是一家成立较早的国人VPS服务商,目前提供洛杉矶MC、洛杉矶C3、和香港邦联、香港沙田电信、香港大埔、日本东京、日本大阪、新加坡、德国和荷兰等机房VPS主机,基于KVM或者XEN架构。下面分别列出几款韩国机房KVM主机配置信息。韩国KVM流量型套餐:KR-Pl...
云步云怎么样?云步云是创建于2021年的品牌,主要从事出售香港vps、美国VPS、日本VPS、香港独立服务器、香港站群服务器等,机房有香港、美国、日本东京等机房,目前在售VPS线路有CN2+BGP、CN2 GIA,香港的线路也是CN2直连大陆,该公司旗下产品均采用KVM虚拟化架构。目前,云步云提供香港安畅、沙田、大浦、葵湾、将军澳、新世界等CN2机房云服务器,2核2G5M仅72.5元/月起。点击进...