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;
}
火数云怎么样?火数云主要提供数据中心基础服务、互联网业务解决方案,及专属服务器租用、云服务器、专属服务器托管、带宽租用等产品和服务。火数云提供洛阳、新乡、安徽、香港、美国等地骨干级机房优质资源,包括BGP国际多线网络,CN2点对点直连带宽以及国际顶尖品牌硬件。专注为个人开发者用户,中小型,大型企业用户提供一站式核心网络云端服务部署,促使用户云端部署化简为零,轻松快捷运用云计算!多年云计算领域服务经...
云如故是一家成立于2018年的国内企业IDC服务商,由山东云如故网络科技有限公司运营,IDC ICP ISP CDN VPN IRCS等证件齐全!合法运营销售,主要从事自营高防独立服务器、物理机、VPS、云服务器,虚拟主机等产品销售,适合高防稳定等需求的用户,可用于建站、游戏、商城、steam、APP、小程序、软件、资料存储等等各种个人及企业级用途。机房可封UDP 海外 支持策略定制 双层硬件(傲...
卢森堡商家gcorelabs是个全球数据中心集大成的运营者,不但提供超过32个数据中心的VPS、13个数据中心的cloud(云服务器)、超过44个数据中心的独立服务器,还提供超过100个数据中心节点的CDN业务。CDN的总带宽容量超过50Tbps,支持免费测试! Gcorelabs根据业务分,有2套后台,分别是: CDN、流媒体平台、DDoS高防业务、块存储、cloud云服务器、裸金属服务器...