编码windows下ANSI、Unicode、UTF-8编码转换代码

unicode转换  时间:2021-04-12  阅读:()

window s下ANSI 、Unicod e、UTF-8编码转换1几种编码方式的说明

1ANSI 一般的txt编码都是AN SI 可以通过另存为指定其它编码方式在c/c++中的c har 、 unsign ed char等均属于该类型

2Unicod e 分为UTF-8、UTF-16和UTF-32一般在Win dows里面提到Unicode编码方式默认指的是UTF-16

1UTF-8使用1-4字节来表示字符常用的ASC II字符使用1字节汉字一般都是3字节

2UTF-16统一使用2字节表示所有字符不考虑所谓的代理 现在广泛的应用于Windows系统

3UTF-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;

}

4Unico d e转向UTF-8Unico 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;

}

青果网络-618阿里云,腾讯云特惠优惠折上折!

官方网站:点击访问青果云官方网站活动方案:—————————–活动规则—————————1、选购活动产品并下单(先不要支付)2、联系我司在线客服修改价格或领取赠送时间3、确认价格已按活动政策修改正确后,支付订单,到此产品开设成功4、本活动产品可以升级,升级所需费用按产品原价计算若发生退款,按资源实际使用情况折算为产品原价再退还剩余余额! 美国洛杉矶CN2_GIACPU内存系统盘流量宽带i...

ThomasHost(月付5美元)美国/法国/英国/加拿大KVM,支持Windows

ThomasHost域名注册自2012年,部落最早分享始于2016年,还算成立了有几年了,商家提供基于KVM架构的VPS,数据中心包括美国、法国、英国、加拿大和爱尔兰等6个地区机房,VPS主机套餐最低2GB内存起步,支持Windows或者Linux操作系统,1Gbps端口不限制流量。最近商家提供了一个5折优惠码,优惠后最低套餐月付5美元起。下面列出部分套餐配置信息。CPU:1core内存:2GB硬...

日本vps云服务器选择指南。

日本vps云服务器怎么选择?很多人都会遇到日本vps和日本云服务器怎么选择的问题,日本云服务器具有免备案的特点。小编今天就分析一下日本云服务器价格多少钱,以方便大家选购的时候有个更加合适的取舍。日本云服务器租用前比较选择,高性能、安全、高效、免备案日本云服务器是很关键的因素。那么,日本云服务器该怎么选择呢?日本作为我们的邻国,与其贸易、文化往来是比较多的。日本云服务器价格多少钱一年?一、日本·CN...

unicode转换为你推荐
Servicemydestoondestoon有多少人用Destoon做站企业信息查询系统查企业信息哪个的软件好?正大天地网天地网微信移动办公平台即时通如何使用即时通啊400电话查询如何辨别400电话的真伪?联系我们代码如何查询统一社会信用代码zencart模板zen cart套用模板后,外观控制显示红色打不开,为什么?drupal主题Drupal比DEDE等国内CMS好在哪里?shopex模板SHOPEX模板 修改整体宽度
域名备案流程 enzu unsplash 华为云主机 php免费空间 彩虹ip 最好的空间 京东商城0元抢购 大容量存储器 建立邮箱 lol台服官网 免费防火墙 双11秒杀 metalink 服务器监测 能外链的相册 爱奇艺会员免费试用 789 lamp怎么读 腾讯网盘 更多