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;
}
EtherNetservers是一家成立于2013年的英国主机商,提供基于OpenVZ和KVM架构的VPS,数据中心包括美国洛杉矶、新泽西和杰克逊维尔,商家支持使用PayPal、支付宝等付款方式,提供 60 天退款保证,这在IDC行业来说很少见,也可见商家对自家产品很有信心。有需要便宜VPS、多IP VPS的朋友可以关注一下。优惠码SUMMER-VPS-15 (终身 15% 的折扣)SUMMER-...
华纳云(HNCloud Limited)是一家专业的全球数据中心基础服务提供商,总部在香港,隶属于香港联合通讯国际有限公司,拥有香港政府颁发的商业登记证明,保证用户的安全性和合规性。 华纳云是APNIC 和 ARIN 会员单位。主要提供香港和美国机房的VPS云服务器和独立服务器。商家支持支付宝、网银、Paypal付款。华纳云主要面向国内用户群,所以线路质量还是不错的,客户使用体验总体反响还是比较好...
rangcloud怎么样?rangcloud是去年年初开办的国人商家,RangCloud是一家以销售NAT起步,后续逐渐开始拓展到VPS及云主机业务,目前有中国香港、美国西雅图、韩国NAT、广州移动、江门移动、镇江BGP、山东联通、山东BGP等机房。目前,RangCloud提供香港CN2线路云服务器,电信走CN2、联通移动直连,云主机采用PCle固态硬盘,19.8元/月起,支持建站使用;美国高防云...