ANSI与Unicode的转换

最近遇到中文路径访问的问题,又从新学习了一遍ansi与Unicode的知识,博文记录下来以供后续参考。windows

 

ANSI 编码
数组

ANSI一种字符代码,为使计算机支持更多语 言,一般使用0x80~0xFF 范围的2 个字节来表示1 个字符。不一样的国家和地区制定了不一样的标准,由此产生了GB23十二、GBK、GB18030、Big五、Shift_JIS 等各自的编码标准。 这些使用多个字节来表明一个字符的各类汉字延伸编码方式,称为ANSI 编码。浏览器

 

关于MBCS字符集(Multi Byte Character System):GB23十二、GBK等编码被称为MBCS,MBCS同ASCII是彻底兼容的。对于前ASCII的128个字符,在MBCS字符集下有彻底相同的编码,而汉字等字符用多个字节存储。也意味着MBCS下,字符的长度有可能有1个字节的,也有多个字节的。ide

 

因此ANSI编码实际上是一个统称,不一样的语言使用不一样的编码规范,并无跨语言统一编码。好比 windows7 notepad记事本保存的时候,在弹出对话框的下方有“编码”下拉框,默认是“ANSI”,也能够选择“Unicode”(实际上是UTF-16)和 “UTF-8”。若是选择了ANSI,那么实际使用的编码规范就跟你的操做系统版本强相关了,若是是简体中文的windows就会用GBK标准。函数

 

Unicode编码学习

就是把地球上全部的语言的符号,都用统一的字符集来表示,一个编码真正作到了惟一。Unicode只是肯定了字符的二进制编码,但并无肯定字符存储的具体实现方式。好比UTF-8 ,UTF16是常见的Unicode实现方式。编码

 

UTF-8编码是变长的,一个字符多是1个字节,2个字节,3个字节或者4个字节长。通常来讲,欧洲的字母字符长度为1到2个字节,而亚洲的大部分字符则是3个字节,附加字符为4个字节长。Unix平台中广泛支持UTF-8字符集,HTML和大多数浏览器也支持UTF-8。

 

UTF-16编码的字符,要么是2个字节,要么是4个字节表示的。windows2000以上版本使用UTF-16,老版本windows用的ANSI。

 

VC下的格式转换

ANSI字符串转Unicode(windows下对应UTF-16编码)
在vc工程选择unicode编译的状况下,若是是字符串常量能够直接使用L和_T or _TEXT宏,也可使用wsprintf函数进行转换(须要引用Windows.h)。
    TCHAR szW[ 100];  
     // 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中文 "); 

 

若是是字符串变量,使用ATL 提供的字符转换宏会比较方便,也可使用wsprintf函数。
     char buff[ 512];  
     // 获取工做目录的路径,ANSI编码,路径中的中文字符占用2个字节  
    std:: string s_currPath = _getcwd(buff, 512);  
      
    TCHAR szW[ 512];  
    USES_CONVERSION;  
     // 注意使用A2W宏,不可直接调用swprintf_s(szW,512,L"%S",...)  
    swprintf_s(szW, 512,L " %s ",A2W(s_currPath.c_str()));  
     // wsprintf能够直接使用
    wsprintfW(szW,L " %S ",s_currPath.c_str()); 

 

Unicode转ANSI
和上面相似,使用ATL的宏W2A便可。或者使用wsprintfA(sA, "%S", L"中文"),其中sA是char数组。
另外,转换还可使用功能更强大的WideCharToMultiByte函数和MultiByteToWideChar函数。

 

C++11与Unicode
C++11对Unicode提供了语言级别和库级别的支持,能够进行Unicode下不一样编码方式的转换,我也没玩过,能够参考这篇blog:
相关文章
相关标签/搜索