ANSI与Unicode的转换
最近遇到中文路径访问的问题,又重新学习了一遍ansi与Unicode的知识,博文记录下来以供后续参考。
ANSI 编码
ANSI是一种字符代码,为使计算机支持更多语 言,通常使用0x80~0xFF 范围的2 个字节来表示1 个字符。不同的国家和地区制定了不同的标准,由此产生了GB2312、GBK、GB18030、Big5、Shift_JIS 等各自的编码标准。 这些使用多个字节来代表一个字符的各种汉字延伸编码方式,称为ANSI 编码。
关于MBCS字符集(Multi Byte Character System):GB2312、GBK等编码被称为MBCS,MBCS同ASCII是完全兼容的。对于前ASCII的128个字符,在MBCS字符集下有完全相同的编码,而汉字等字符用多个字节存储。也意味着MBCS下,字符的长度有可能有1个字节的,也有多个字节的。
所以ANSI编码其实是一个统称,不同的语言使用不同的编码规范,并没有跨语言统一编码。比如 windows7 notepad记事本保存的时候,在弹出对话框的下方有“编码”下拉框,默认是“ANSI”,也可以选择“Unicode”(其实是UTF-16)和 “UTF-8”。如果选择了ANSI,那么实际使用的编码规范就跟你的操作系统版本强相关了,如果是简体中文的windows就会用GBK标准。
Unicode编码
就是把地球上所有的语言的符号,都用统一的字符集来表示,一个编码真正做到了唯一。Unicode只是确定了字符的二进制编码,但并没有确定字符存储的具体实现方式。比如UTF-8 ,UTF16是常见的Unicode实现方式。
UTF-16编码的字符,要么是2个字节,要么是4个字节表示的。windows2000以上版本使用UTF-16,老版本windows用的ANSI。
ANSI字符串转Unicode(windows下对应UTF-16编码)
在vc工程选择unicode编译的情况下,如果是字符串常量可以直接使用L和_T or _TEXT宏,也可以使用wsprintf函数进行转换(需要引用Windows.h)。
TCHAR szW[];
//all strings are Unicode
swprintf(szW,L"%s",L"Unicode Str中文");
CString name = _T("Report.txt");
//ANSI to Unicode,wsprintf可以直接用,使用大写的%S
//注意swprintf函数是不行的,据说要先加setlocale(LC_CTYPE, "chs")语句
wsprintfW(szW,L"%S","Unicode Str中文");
char buff[];
//获取工作目录的路径,ANSI编码,路径中的中文字符占用2个字节
std::string s_currPath = _getcwd(buff,);
TCHAR szW[];
USES_CONVERSION;
//注意使用A2W宏,不可直接调用swprintf_s(szW,512,L"%S",...)
swprintf_s(szW,,L"%s",A2W(s_currPath.c_str()));
//wsprintf可以直接使用
wsprintfW(szW,L"%S",s_currPath.c_str());
和上面类似,使用ATL的宏W2A即可。或者使用wsprintfA(sA, "%S", L"中文"),其中sA是char数组。
另外,转换还可以使用功能更强大的WideCharToMultiByte函数和MultiByteToWideChar函数。
ANSI与Unicode的转换的更多相关文章
- Ansi 与 Unicode 字符串类型的互相转换
WideCharToMultiByte 实现宽字节转换到窄字节MultiByteToWideChar 实现窄字节转换到宽字节 WideCharToMultiByte 的代码页用来标记与新转换的字符串相 ...
- Ansi、Unicode、UTF8字符串之间的转换和写入文本文件
转载请注明出处http://www.cppblog.com/greatws/archive/2008/08/31/60546.html 最近有人问我关于这个的问题,就此写一篇blog Ansi字符串我 ...
- 从Java String实例来理解ANSI、Unicode、BMP、UTF等编码概念
转(http://www.codeceo.com/article/java-string-ansi-unicode-bmp-utf.html#0-tsina-1-10971-397232819ff9a ...
- unicode,ansi,utf-8,unicode big endian编码的区别
知乎--http://www.zhihu.com/question/23374078 http://wenku.baidu.com/view/cb9fe505cc17552707220865.html ...
- 关于ASCII、GB231、GBK、UTF-8/UTF8、ANSI、unicode的学习笔记
继续上次的学习内容,写一些自己学习的笔记吧!总是觉得没有笔记的学习总是不那么踏实,我承认自己是个记忆力很差的人,特别羡慕那些可以把自己学过的东西记得很牢靠的人.哎!可惜我不是,那只能做出来点东西,就算 ...
- 关于ANSI 和 Unicode
关于ANSI和Unicode 1.ANSI American National Standards Institute(美国国家标准学会),ANSI编码不是一种具体的编码方式,而是一种指定在某些环境下 ...
- 字符编码的故事(ASCII,ANSI,Unicode,Utf-8区别)转载
http://www.imkevinyang.com/2009/02/字符编解码的故事(ascii,ansi,unicode,utf-8区别).html 很久很久以前,有一群人,他们决定用8个可以开合 ...
- 《windows核心编程系列》二谈谈ANSI和Unicode字符集 .
http://blog.csdn.net/ithzhang/article/details/7916732转载请注明出处!! 第二章:字符和字符串处理 使用vc编程时项目-->属性-->常 ...
- 多字符集(ANSI)和UNICODE及字符串处理方式准则
在我们编写程序的时候,使用最多的是字符串的处理,而ANSI和UNICODE的相互转换经常搞的我们头晕眼乱. 应该说UNICODE是一种比较好的编码方式,在我们的程序中应该尽量使用UNICODE编码方式 ...
随机推荐
- jedis使用管道(pipeline)对redis进行读写(使用hmset、hgetall测试)
一般情况下,Redis Client端发出一个请求后,通常会阻塞并等待Redis服务端处理,Redis服务端处理完后请求命令后会将结果通过响应报文返回给Client.这有点类似于HBase的Scan, ...
- neutron二层网络实现
一.基本概念 1.tap设备 比如vnet0,是虚拟化技术和KVM和XEN用来实现虚拟网卡的,当一个以太网帧发送给TAP设备时,这个以太网帧就会被虚拟机操作系统所接手,命名空间用于隔离虚拟网络设备. ...
- FLASH动作脚本详解
FLASH动作脚本详解 一.FLASH脚本基础入门讲解 二.按钮AS的编写 三.影片剪辑的AS编写 四.动态文本框 五.影片剪辑的拖拽 六.流程控制与循环语句 七.绘图及颜色的AS的编写 八.声音 A ...
- CRC-16校验原理
最详细易懂的CRC-16校验原理(附源程序) 1.循环校验码(CRC码): 是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定. 2.生成CRC码的基本原理: 任意一 ...
- DEV控件 皮肤问题
今天用cnPack清理了下整个工程的引用单元,清理完,问题来了,TcxPageControl不透明了. 折腾了一会,找到原因,清理单元时将dxSkinscxPCPainter也清掉了,导致皮肤无法正常 ...
- HTTP浅析
引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...
- Python之struct
struct是Python中的内建模块,用来在C语言中的结构体与Python中的字符串之间进行转换,数据一般来自文件或网络 1. 功能 (1) 按照指定格式将Python数据转换为字符串(该字符串为字 ...
- 【转载】对一致性Hash算法,Java代码实现的深入研究
原文地址:http://www.cnblogs.com/xrq730/p/5186728.html 一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细 ...
- MD5中Java和Js配套实现
MD5为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.用于确保信息传输完整一致.是计算机广泛使用的杂凑算法之一(又译摘要算法.哈希算法),主流编程语言普遍已有MD5实现.将数据(如汉 ...
- javax.servlet-api-xx.jar和servlet-api.jar区别
一.简介支持servlet的jar包.应该叫servlet-api.jar如果编写过servlet就知道要用到HttpServletRequest和HttpServletResponse等对象,这些对 ...