要谈编码就要先谈两个十分容易混淆的概念,一个是编码字符集
(Coded Character Set),一个是字符编码方案
(Character Encoding Scheme)。
编码字符集就是将字符集中每个字符赋一个数字代码
,这是为了便于计算机处理。编码字符集一般由标准组织制定,Unicode就是典型的编码字符集。一个编码字符集必定对应一个字符集,Unicode编码字符集对应Unicode字符集,那么什么是字符集呢?
字符集是一个字符的集合,它规定这个集合包含哪些字符
。Unicode字符集包含所有Unicode字符,这几乎囊括了世界上所有语言的文字。一个更小的字符集是ASCII字符集,它只有128个字符,包含52个字母、10个数字、一些标点符号和一些控制字符。一个字符集想要被计算机表示,首先要将它映射成数字代码,因为计算机本质上只能表示数字,这是由编码字符集定义的。如何存储这些数字代码就涉及到字符编码方案了。
字符编码方案定义如何将数字代码映射成字节序列
。有人可能就要问了,有必要这么麻烦吗,代码1不就映射成字节1,代码2不就映射成字节2,依次类推。的确如果,字符集的不超过256个字符,这是一种非常合理简单的编码方案,每个字符只用一个字节来表示就可以了。但是如果字符集大小超过256个且不超过65536个,每个字符就需要2字节来编码,如果字符集包含更多的字符就需要使用更多的字节来编码一个字符,这种编码方案称为定长编码
,例如GB2312就是采用这样的编码方案。这种编码方案很简单但是却存在问题,它对常用的和生癖的字符都使用同样的长度来编码,这很浪费存储空间,一种更好的编码方案是使用变长编码
,它对常用的字符使用一个字节来编码,对不常用的字符使用两个字节来编码,而对非常生癖的字符使用三个或更多的字节来编码。Unicode编码字符集的一种变长编码方案是就是UTF-8,它的定长编码方案称为UTF-16。需要注意的是,既然涉及到多个字节就需要注意字节序了,因此UTF-16又分为Big Endian UTF-16和Little Endian UTF-16。UTF-8只能有一种字节序,这是因为字符编码之后的字节之间存在依赖关系。
最后什么是编码呢?编码是编码字符集和字符编码方案的一个组合
,它可以将字符集中的字符映射成字节序列。编码隐含着编码字符集和字符编码方案,从而也隐含着字符集。例如UTF-8是一种编码,它是Unicode编码字符集和UTF8编码方案的一个组合。GB2312也是一种编码,它的编码字符集就是编码的简体中文字符集,编码方案采用定长编码。实践中经常混用编码字符集和编码这两个概念,这是因为大多数编码字符集都只有一种编码方案,这样的编码字符集(或者说编码)包括GB2312, GBK, ASCII, ISO8859-1等。但是当编码字符集存在多种编码方案时,就有必要区分编码字符集和编码了,例如我们说Unicode时一般是指编码字符集,说UTF-8,UTF-16时才是指编码。
分享到:
相关推荐
编码时需要指明使用的字符集,不同的字符集有不同的编码规则。 - **解码**: 将字节数组转换回字符序列的过程称为解码。解码时同样需要知道原来使用的字符集。 #### 四、示例说明 假设有一个`String`对象`str = ...
ANSI编码是一种基于区域设置的字符编码方式,而在Windows操作系统中,UNICODE是使用两个字节表示每个字符的编码标准,能支持更广泛的字符集。在处理字符串时,如果从ANSI编码转换为UNICODE,需要进行字符编码的转换...
ASCII仅支持英文字符,而Unicode则覆盖了世界上大多数语言的字符,其中UTF-8是目前最广泛使用的编码方式,它能表示Unicode字符集。在Python中,我们可以通过`encode()`函数将字符串转换为字节流,例如`str.encode('...
char 型变量可以存贮一个中文汉字,因为 Java 使用 Unicode 编码,char 类型可以表示 Unicode 编码中的所有字符。 8. 用最有效率的方法算出 2 乘以 8 等于几? 可以使用移位运算来计算 2 乘以 8,即 2 。 9. 请...
55、编码转换:怎样将GB2312 编码的字符串转换为ISO-8859-1 编码的字符串? 14 56、写一个函数,要求输入一个字符串和一个字符长度,对该字符串进行分隔。 14 59、Java 编程,打印昨天的当前时刻。 15 60、java 和...
- 可以,因为一个 `char` 类型变量在Java中占据两个字节,足以存储一个UTF-16编码的中文字符。 8. **用最有效率的方法算出2乘以8等于几?** - `int result = 2 ;` 或 `int result = 1 ;` 后跟 `result *= 2;`,...
19、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 90 20.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序...
**解答**: `char`类型变量可以存储Unicode编码的字符,而Unicode编码集包含了大部分常用的中文汉字。因此,`char`类型变量能够存储中文汉字。需要注意的是,Unicode编码占用两个字节,因此`char`类型变量也占用两个...
19、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 98 20.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序...
19、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 90 20.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序...
19、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 90 20.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序...
19、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 90 20.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序...
19、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 90 20.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序...
19、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 90 20.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序...
Java 使用 Unicode 字符集,支持各种语言的字符。 **8. 用最有效率的方法算出 2 乘以 8 等于几?** 使用左移运算符 `可以高效地完成乘以 2 的倍数的运算。例如 `2 相当于 `2 * 8`,结果为 `16`。 **9. 请设计一个...
- **概念**:Access Control List,用于控制客户端对ZooKeeper节点的操作权限。 - **权限类型**:CREATE、DELETE、READ、WRITE、ADMIN。 #### 10、Chroot特性 - **特性**:允许客户端指定一个根节点作为其命名空间...