字符编码

ANSI多字节编码:

ASCII:美国信息交换标准代码,早期计算使用的字符编码;特点:一个字母或符号只需要一个字节存储;

ANSI:美国国家标准学会,主要是应对多国家本地化文字的问题;特点:多字节编码方式,系统里的英文和符号就使用单字节的 ASCII(0x00~0x7f),而对于汉字之类的本地化字符编码,就采用 0x80~0xFF 范围内的多个字节来表示,这样既能兼容 ASCII ,又能正常使用本地化语言文字。对于大陆国标码已经发展了好几代,一般对简体中文的文本选择 GBK 或 GB18030 编码都是可以正常显示的。

Unicode系列编码:

Unicode编码主要是为了解决ANSI编码中0x80~0xff中各国本地化语言各自为战,没有统一的标准,造成多国语言的冲突;Unicode字符编码是对全球语言统一分配编码区间,各种语言字符互相不冲突,都可以兼容使用;

  1. Unicode 编码系统,可分为编码方式和实现方式两个层次。所谓编码方式就是采用几个字节表示一个字符。其中UTF-8是灵活的变长编码,对于 ASCII 使用一个字节编码,其他本地化语言文字用多个字节编码,最长可以到 6 个字节编码一个字符。
  2. UTF-16:兼容 UCS-2,一般都是两字节表示一个字符,对于超出两字节的国际码字符,使用一对两字节来表示。在存储时,按两个字节的排布顺 序,可以分为 UTF-16LE(Little Endian,小端字节序)和UTF-16BE(Big Endian,大端字节序),微软所说的 Unicode 默认就是 UTF-16LE。
  3. UTF-32:同 UCS-4,因为用四个字节表示一个字符,所以不需要考虑扩展了。这种编码方式简单,但也特别浪费空间,

在 C++ 中,以前通常使用 char 表示单字节的字符,使用 wchar_t 表示宽字符,对国际码提供一定程度的支持。 char * 字符串有专门的封装类 std::string 来处理,标准输入输出流是 std::cin 和 std::cout 。对于 wchar_t * 字符串,其封装类是 std::wstring,标准输入输出流是 wcin 和 wcout。
        Windows 系统里的宽字符是两个字节,就是 UTF-16;而 Unix/Linux 系统里为了更全面的国际码支持,其宽字符是四个字节,即 UTF-32 编码。
        MFC 一般用自家的 TCHAR 和 CString 类支持国际化,当没有定义 _UNICODE 宏时,TCHAR = char,当定义了 _UNICODE宏 时,TCHAR = wchar_t,CString 内部也是类似的。

在 Windows 系统里源文件是 GBK ,其命令行编码也是 GBK;在 Linux 系统里源文件是 UTF-8,其命令行编码也是 UTF-8。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值