zoukankan      html  css  js  c++  java
  • 说说字符集、编码概念

    要谈编码就要先谈两个十分容易混淆的概念,一个是编码字符集 (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时才是指编码。

  • 相关阅读:
    atitit.ntfs ext 文件系统新特性对比
    Atitit.图片木马的原理与防范 attilax 总结
    Atitit.图片木马的原理与防范 attilax 总结
    Atitit.jdk java8的语法特性详解 attilax 总结
    Atitit.jdk java8的语法特性详解 attilax 总结
    Atitit.远程接口 监控与木马   常用的api 标准化v2 q216
    Atitit.远程接口 监控与木马   常用的api 标准化v2 q216
    Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结
    Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结
    Atitit.跨平台预定义函数 魔术方法 魔术函数 钩子函数 api兼容性草案 v2 q216  java c# php js.docx
  • 原文地址:https://www.cnblogs.com/novalist/p/6402653.html
Copyright © 2011-2022 走看看