字符学习 Unicode 与双字节

来源:互联网 发布:网络订餐 方便面 编辑:程序博客网 时间:2024/06/01 22:31

1、美国信息交换码:

            ASCII,字符码有26个小写字母,26个大写字母、10个数字、32个符号、33个句柄和一个空格,一共128个字符码。

   ASCII的优点:26个字母代码是连续的;大写字母和小写字母可通过一位数据相互转化;10个数字的代码可从数值本本身方便得到(0在9的后面)

   缺点:主要在A上,因为他是一个美国的标准不能满足其他国家的标准。

 

2、Unicode解决方案:

         我们面临的基本问题是世界上的书写语言不能简单的用256个8位代码表示。以前的解决方案包括代码页和DBCS已经证明不能满足需要。

        16为值,正是Unicode被制定的原因,与混乱的256个字符代码映像,以及含有一些1字节代码和一些2字节代码的双字节字符集不同。Unicode是一个统一的16位系统,这样就允许表示65536个字符。

        Unicode的缺点:它的字符串占用的内存是ASCII字符串的2倍。(然而压缩文件有助于极大的减少文件所占的磁盘空间),相对来说不大习惯用Unicode。

3、宽字符和C

        没几个程序写作者清楚ANSI/ISO,--美国国家标准程序设计语言-c的概念来支持多个字节代表一字符的字符集。这些宽字符与常用的字符完美的共存。

         ANSI C也支持多字节字符集,如日文、中文和韩文。然而,这些多字节字符集被当做单字节构成的字符串来看待,只不过其中一些字符改变了后续字符的含义而已。多字节字符串主要影响C语言程序执行期间的链接库函数。相比之下,宽字符比正常字符宽,会引起一些编译问题。    

        宽字符不需要是Unicode.

        在win32 console程序中使用哪个宏,取决于你喜欢简洁还是详细。基本地,必须按照下述方法_T或者_TEXT宏内定义字符串文字:

       _TEXT("hello!")

       这样做的话,如果定义了_UNICODE,那么该串将解释为宽字符的组合,否则解释为8位字符字符串。

4、windows 表头文件类型

        一个windows程序包括windows.h。该文件包括许多其他头文件,包括windef.h,该文件中有许多在windows中使用的基本型态定

义。winnt.h定义了新的数据型态,称为char和wchar.

      typedef char CHAR;

      typedef wchar_t WCHAR; //wc

      当需要定义8位字符或者16位字符时,推荐你在windows程序中使用使用的字符型态是char和wchar。

      wchar定义后面的注释是匈牙利标记法的建议:一个基与wchar的数据型态的变量可在前面附加上字母wc以说明一个宽字符。

        winnt.h表头文件进而定义了可用作8位字符串指针的六种数据型态和四个可用const8位字符串指针的数据型态。

      如果你希望明确定义8位字符变量和字符串,请使用char,pchar(或者其他),以及带引号的字符串。

      为了明确16位字符变量和字符串,请使用wchar,pwchar并将L添加到引号前面。对于是8位还是16位取决于Unicode标示符的定义的变量或字符串,要使用tchar,ptchar,text宏。

5、widows函数呼叫

       如果定义了unicode标示符,那么程序中所有的MessageBox函数呼叫实际上就是MessageBoxW函数;否则,就是MessageBoxA函数。

      执行程序时,windows将程序中不同的函数呼叫与不同的Windows动态链接库的进入点连接。在Windows98中不能执行Unicode版的Windows 函数,虽然这些函数有进入点,但通常返回错误代码。

6、Windows的字符串函数

        Windows定义的一组字符串函数,这些函数用来计算字符串长度、复制字符串、连接字符串和比较字符串:

ILength = lstrlen (pString) ;           pString = lstrcpy (pString1, pString2) ;    pString = lstrcpyn (pString1, pString2, iCopString = lstrcat (pString1, pString2) ;    iComp = lstrcmp (pString1, pString2) ;    iComp = lstrcmpi (pString1, pString2) ;  


这些函数与C链接库中对应的函数功能相同。如果定义了UNICODE标识符,那么这些函数将接受宽字符串,否则只接受常规字符串。宽字符串版的lstrlenW函数可在Windows 98中执行。

7、国际化

       程序写作时被限制成既可以使用也可以不适用定义的Unicode标识符来编译,这包括对所有字符和字符串定义使用TCHAR,对字符串文字使用TEXT宏,以及注意不要混淆字节和字符。

     project-->setting 单击c/c++标签。使用这种方式,这些程序就可以方便的被重写编译和连接以供测试。