赞
踩
ASCII (American Standard Code for Information Interchange):美国信息交换标准代码是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,并等同于国际标准 ISO/IEC 646。ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符 [1] 。
ASCII 码使用指定的7 位(标准ASCII码)或8 位(拓展ASCII码)二进制数组合来表示128 或256 种可能的字符。标准ASCII码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号,以及在美式英语中使用的特殊控制字符 [1] 。
统一码(Unicode),也叫万国码、单一码,由统一码联盟开发,是计算机科学领域里的一项业界标准,包括字符集、编码方案等。
统一码是为了解决传统的字符编码方案(ASCII)的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
大多数计算机采用美国标准信息交换码(ASCII码),它是表示所有大小写字母、数字、标点符号和控制字符的7位编码方案。统一码包含ASCII码,‘\u0000’到’\u007F’对应全部128个ACSII字符。在JAVA中可以使用统一码。
GBK全称《汉字内码扩展规范》(GBK即“国标”、“扩展”汉语拼音的第一个字母,英文名称:Chinese Internal Code Specification) ,由中华人民共和国全国信息技术标准化技术委员会1995年12月1日制订。
编码方式:经实际测试和查阅文档,GBK是采用单双字节变长编码,英文使用单字节编码,完全兼容ASCII字符编码,中文部分采用双字节编码。
GBK要转utf-8必须先将其转换成unicode编码,然后再讲unicode编码存储为utf-8格式才行。GBK只是对汉字的国际编码格式,其实我个人觉得并没有什么前景(自从unicode编程流行以后)。
其实unicode和GBK才是编码的值,这与计算机其实没有什么太多的关系,只是一组字符设定或者说是从数字和字符之间的逻辑映射的概念编码。而utf-8和utf-16是讨论的如何将unicode编码存储在计算机中以及如何在计算机之间传输。简单来说,unicode才是编码,而utf-8是存储方式。
UTF是Unicode Transfer Format的缩写,即把Unicode转做某种格式的意思。
UTF后的数字代表编码的最小单位(码元),如UTF-8表示最小单位1字节
UTF-8(8位元,Universal Character Set/Unicode Transformation Format)是针对Unicode的一种变长字符编码存储方案。它可以用来表示Unicode标准中的任何字符,而且其编码中的第一个字节仍与ASCII相容,使得原来处理ASCII字符的软件无须或只进行少部分修改后,便可继续使用。因此,它逐渐成为电子邮件、网页及其他存储或传送文字的应用中,优先采用的编码。
UCS字符U+0000到U+007F(ASCII)被编码为字节0x00到0x7F(ASCII兼容)。这意味着只包含7位ASCII字符的文件在ASCII和UTF-8两种编码方式下是一样的。
UTF8分成单字节、双字节、三字节、四字节模式 。UTF-8编码字符理论上可以最多到4个字节长:
正如上面所示,在uft-8编码其实得到的字节数不确定,可能是1个字节,也可能是3个字节。但utf-8最大的好处是和ASCII码兼容,存储英文字母都是一个字节,因此现在被广泛应用。
提示:在英文比较多的地方,我们用utf-8编码比较好,而在汉语或者其他国际字符比较多的情况下,我们用utf-16可以达到最小存储。
UTF-32是针对Unicode的一种定长字符编码存储方案,对每一个Unicode码位使用恰好32位元。其它的UTF格式则使用不定长度编码。因为UTF-32对每个字符都使用4字节存储,就空间而言,是非常没有效率的,使得UTF-32通常会是其它编码文章体量的二到四倍。虽然每一个码位使用固定长度的字节看似方便,其实它并不如其它Unicode编码使用得广泛。
语法:
char ch1{ 'a' }; // or { u8'a' }
wchar_t ch2{ L'a' };
char16_t ch3{ u'a' };
char32_t ch4{ U'a' };
char8_t、char16_t 和 char32_t 类型分别表示 8 位、16 位和 32 位宽字符。 (char8_t 是 C++20 中的新增功能,需要 /std:c++20 或 /std:c++latest 编译器选项。)编码为 UTF-8 的 Unicode 可以存储在 char8_t 类型中。 char8_t 和 char 类型的字符串称为“窄”字符串,即用于存储 Unicode 或多字节字符。 编码为 UTF-16 的 Unicode 可以存储在 char16_t 类型中,而编码为 UTF-32 的 Unicode 可以存储在 char32_t 类型中。 这些类型和 wchar_t 类型的字符串都称为“宽”字符串,但该术语通常特指 wchar_t 类型的字符串。
在 C++ 标准库中,basic_string 类型专用于窄字符串和宽字符串。 字符的类型为 char 时,使用 std::string;字符的类型为 char8_t 时,使用 std::u8string;字符的类型为 char16_t 时,使用 std::u16string;字符的类型为 char32_t 时,使用 std::u32string;而字符的类型为 wchar_t 时,使用 std::wstring。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。