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;
}
justhost怎么样?justhost是一家俄罗斯主机商,2006年成立,提供各种主机服务,vps基于kvm,有HDD和SSD硬盘两种,特色是200Mbps不限流量(之前是100Mbps,现在升级为200Mbps)。下面是HDD硬盘的KVM VPS,性价比最高,此外还有SSD硬盘的KVM VPS,价格略高。支持Paypal付款。国内建议选择新西伯利亚或者莫斯科DataLine。支持Paypal付...
恒创科技也有暑期的活动,其中香港服务器也有一定折扣,当然是针对新用户的,如果我们还没有注册过或者可以有办法注册到新用户的,可以买他们家的香港服务器活动价格,2M带宽香港云服务器317元。对于一般用途还是够用的。 活动链接:恒创暑期活动爆款活动均是针对新用户的。1、云服务器仅限首次购买恒创科技产品的新用户。1 核 1G 实例规格,单个账户限购 1台;其他活动机型,单个账户限购 3 台(必须在一个订单...
Krypt这两天发布了ION平台9月份优惠信息,提供一款特选套餐年付120美元(原价$162/年),开设在洛杉矶或者圣何塞机房,支持Windows或者Linux操作系统。ion.kryptcloud.com是Krypt机房上线的云主机平台,主要提供基于KVM架构云主机产品,相对于KT主站云服务器要便宜很多,产品可选洛杉矶、圣何塞或者新加坡等地机房。洛杉矶机房CPU:2 cores内存:2GB硬盘:...