C++中处理字符集与常见字符集介绍

时间:2024-04-09 14:54:04

C++提供不同的字符类型用以应付前述字符集:
·char可被用于所有8bit以下的字符集,例如US-ASCII、ISO-Latin-1和ISO-Latin-9。此外它可被用于UTF-8的8bit值。
·char16_t(始自C++11)可被用于UCS-2,也可用于UTF-16的code unit。
·char32_t(始自C++1l)可被用于UCS-4/UTF-32。
·wchar_t是所有被支持之locale中的最大扩充字符集内的类型。它通常等价于char16t或 char32t。
所有这些类型都是语言关键字,你可以根据这些类型对任何函数进行重载(overload)。然而请注意,对char16_t和char32_t的支持是有限度的。虽然character trait提供了处理Unicode string的能力,但目前的I/O并不存在针对那些类型的重载版本。

 

最重要的字符集如下:
US-ASCI,这是个7-bit字符集,于1963年完成标准化,用于电传打字机( teleprinter)和其他设备,所以最开始的16个值是不可打印字符( nonprintable character)如 carriage return. horizontal tab(水平制表符)、 backspace(回退键)或bell(铃声键)等。这个字符集是其他所有字符集的基础,往往各字符集内介于0x20和0x7F之间有着与此相同的字符


ISO- Latin-1或ISO-8859-1(见 (Isolatin1),这是个8-bit字符集,于1987年完成标准化,提供西欧语言之所有字符。这个字符集也作为其他所有字符集的基础,往往各字符集内介于0x20至0x7F和0xA0至0xFF之间有着与此相同的字符。


ISO- Latin-9或ISO-8859-15(见 (Isolatin9),这是个8-bit字符集,于1999年完成标准化,是西欧语言之所有字符的增强版,以欧元(curo)符号和其他特殊字符替换了若干不普遍的符号


UCS-2,这是个16-bit定长字符集,提供 niversal Character Set(全球字符集)和Unicode(統一码)中最重要的65536个字符


UTF-8(见IUTF81),这是个 multibyte字符集,使用1~4个8bit值,用来表现 Universal Character Ser(全球字符集)和 Unicode(统一码)的所有字符。它被广泛使用于万维网(World Wide Web)


UTF-16,这是个 multibyte字符集,使用1~2个 code unit(每个16bit),用来表现Universal Character Set(全球字符集)和 Unicode(统一码)之所有字符


UCS-4或UTF-32,这是个32-bit定长字符集,提供 Universal Character Set(全球字符集)和 Unicode(统一码)之所有标准化字符。


注意,UTF-16和UTF-32可能会在其完整字符序列一开始放个 byte onder mark(BOM),用以标示它所使用的是big- endian(此为默认)或 lintle-endian,这两者代表某种byte排列次序。另外你也可以明确指出欲使用UTF-16BE、UTF-16LE、UTF-32BE或UTF-32LE。
C++中处理字符集与常见字符集介绍

图16.1显示了以某个一连串字符为例的各种十六进制編码( hexadecimal encoding),此图给出了寻常的ASCI字符、德文中的元音变化、欧元符号e。此处的UTF-16和UTF-32并未使用 byte order mark那样的mark应该会有数值0 XFEFF
注意,UTF-16和UCS-2在 OXFFFF之前几平完全相同。只有面对若干不存在于UCS-2的军见字符时,UTF-16使用两个16 bit code unit,但必须在UCS-2是 multibyte字符集的前提下。
 

来源:

c++ 标准库 2nd