• 【Windows程序设计】Unicode简介


    • 字符的发展史

    1、最初的字符集ASCII码,128个字符。

    2、扩展ASCII码,共有256个字符。

    3、双字节字符集(DBCS:double-byte character set)。DBCS从256编码开始,最初的128个代码是ASCII,较高的128个代码中的某些总是跟随着第二个字节。这两个字节一起(称作首字节和跟随字节)定义一个字符,通常是一个复杂的象形文字。双字符集问题并不是说字符由两个字节代表。问题在于一些字符(特别是ASCII字符)由1个字节表示,而另一些字符由两个字节表示。

    4、Unicode编码中每个字符占用16个字节,它是一套全球化的编码方案,包括世界上所有的象形符号。然而Unicode编码的问题在于每个字符占用两个字节的空间在某些情况下非常浪费。

    因此,有些时候我们希望维护统一的原始程序,它能根据某项标识进行ASCII码编译,也能进行Unicode码编译。在windows编程中,提供了TCHAR.H头文件,它为我们提供了这项功能。

    • 宽字符

    ANSI C支持8位的character集,也支持16位的宽字符集。宽字符集并不是unicode,unicode是一种宽字符集。

    在C语言中,有如下的几种定义字符的方式,它们需要的存储空间如下所示:

    char c = 'A';     //c需要一个字节的存储单元。

    wchar_t c = 'A';    //c需要两个字节的存储单元

    wchar_t * p = L"Hello!";  //p需要四个字节的存储单元,L告诉编译器字符串按宽字符集保存,占14个字节存储,其中包含6个宽字符,和1个2位的0字符

    针对宽字符的库函数示例:

    char * pc = "Hello!";

    iLength = strlen(pc);    //可知iLength等于6


    wchar_t * pw = L"Hello!";

    iLength = wcslen(pw);   //iLength等于6

    • 宽字符与Windows

    若想明确定义8位字符变量和字符串,使用CHAR, PCHAR;

    若想明确定义16位字符变量和字符串,使用WCHAR, PWCHAR,并使用L标识字符串;

    对于使用8位还是16位字符,取决于UNICODE标识符的定义,此时字符变量和字符串的定义使用TCHAR, PTCHAR,以及TEXT宏。

  • 相关阅读:
    JavaScript编码规范
    查询Sqlserver数据库死锁的一个存储过程
    Sql Server 阻塞的常见原因和解决办法
    在Repeater中使用DropDownList的方法
    springboot集成jsp
    springboot 集成 freemarker
    No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK? idea maven 打包报错问题解决
    手动安装sublimeText3插件
    Sublime text 3搭建Python开发环境及常用插件安装
    qemu通过控制台向虚拟机输入组合键
  • 原文地址:https://www.cnblogs.com/qi09/p/2362006.html
Copyright © 2020-2023  润新知