美文网首页
比特--字节--字符--编码

比特--字节--字符--编码

作者: maxwellyue | 来源:发表于2017-05-22 22:02 被阅读323次

比特

  • 计算机专业术语,是信息量单位,是由英文BIT音译而来。
  • 二进制数系统中,每个0或1就是一个位(bit),位是数据存储的最小单位。
  • 二进制数的一位所包含的信息就是一比特,如二进制数0100就是4比特。
  • 计算机中的CPU位数指的是CPU一次能处理的最大位数。例如32位计算机的CPU一次最多能处理32位数据。
  • 比特就是 bit(可以简写为b),就是位,是数据存储的最小单位。</br>
  • bit=位=比特

字节

  • 字节是现代计算机中连续的、固定数量的比特(二进制):八个比特为一字节
  • 英文Byte翻译就是字节
  • 字节就是Byte(可以简写为B),一字节就等于(占)8比特,就等于(占)8位</br>
  • 1字节=8比特=8bit=8位

  • java中基本数据类型

类型|字节数|(二进位制)位数|最小|最大|默认|其他
--|--|--|--|--|--|--|--
byte|1|8|-128(-27)|127(27-1)|0|
short|2|16|-32768(-215)|32767(215-1)|0|
int|4|32|- 2,147,483,648(-231)|2,147,483,647(231 -1)|0|
long|8|64|-9,223,372,036,854,775,808(-2^63)|9,223,372,036,854,775,807 (2^63 -1)|0L|
float|4|32|||0.0f|
double|8|64|||0.0d|
boolean||1|||false|
char|2|16||||


字符与编码

  • ASCII码
    字符编码,统一规定了英语字符与二进制位之间的关系。
    ASCII码一共规定了128个字符的编码,比如空格"SPACE"是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。
  • Unicode
    Unicode涵盖了各个国家语言可能出现的符号和文字,并将为他们编号,比如,U+0639表示阿拉伯字母Ain,U+0041表示英语的大写字母A,U+4E25表示汉字"严"。
    Unicode只是一个编码字符集。
    Unicode只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。

字库表(character repertoire):一个相当于所有可读或者可显示字符的数据库,决定了整个字符集能够展现表示的所有字符的范围。
编码字符集(coded character set):用一个编码值code point来表示一个字符在字库中的位置。
字符编码(character encoding form):编码字符集和实际存储数值之间的转换关系。

Unicode是一个简单的标准,用来把字符映射到数字上(可以这样理解:选取一个具体的数字范围,然后将范围中的数字设置定义为码位,然后为每个码位编制一个文字符号,这样文字符号就和数字建立了一一对应的关系。Unicode就是制定了这样一种关系。而UTF-8实现,是指怎样将这个码位存储起来,是1个字节还是2个字节,还是多个字节)。Unicode协会的人会帮你处理所有幕后的问题,包括为新字符指定编码。Unicode并不告诉你字符是怎么编码成字节的。这是被编码方案决定的,通过UTF来指定。

  • UTF-8
    UTF-8是一种字符编码,是Unicode规则字库的一种实现形式(从UTF-8的全称8-bit Unicode Transformation Format可以辅助理解这一点,utf-16,utf-32都是Unicode规则字库的一种实现形式)。
    Unicode的编号从0000开始一直到10FFFF共分为17个Plane(016),每个Plane中有65536个字符。而UTF-8则只实现了第一个Plane,可见UTF-8虽然是一个当今接受度最广的字符集编码,但是它并没有涵盖整个Unicode的字库,这也造成了它在某些场景下对于特殊字符的处理困难~
  • UTF-8编码为变长编码。最小编码单位(code unit)为一个字节。一个字节的前1-3个bit为描述性部分,后面为实际序号部分。它可以使用1~6个字节表示一个符号(这句话可以参考维基百科的说明来理解),根据不同的符号而变化字节长度。
  • 对一个英文字母,在UTF-8编码方式下占用1个字节
  • 对一个数字,在UTF-8编码方式下占用1个字节
  • 对一个汉字而言,在UTF-8编码方式下2-4个字节(没有找到标准解答,一般为3到4个字节)
  • ISO-8859-1
    共能表示 256 个字符,占用1个字节
  • GB2312和GBK
    GB2312全称是《信息交换用汉字编码字符集 基本集》,总的编码范围是 A1-F7,其中从 A1-A9 是符号区,总共包含 682 个符号,从 B0-F7 是汉字区,包含 6763 个汉字。GBK全称叫《汉字内码扩展规范》,是国家技术监督局为 windows95 所制定的新的汉字内码规范,它的出现是为了扩展 GB2312,加入更多的汉字,它的编码范围是 8140~FEFE(去掉 XX7F)总共有 23940 个码位,它能表示 21003 个汉字,它的编码是和 GB2312 兼容的,也就是说用 GB2312 编码的汉字可以用 GBK 来解码,并且不会有乱码。
    对GB2312和GBK而言:
  • 对一个英文字母或者一个数字,占用1个字节
  • 对一个汉字而言,占用2个字节

为什么只会出现汉字乱码,英文字母和数字却不会:ASCII最先使用,其它的字符集都兼容ASCII

  • 内码和外码
    内码(internal encoding):程序内部使用的字符编码,特别是某种语言实现其char或String类型在内存里用的内部编码;
    外码(external encoding):程序与外部交互时外部使用的字符编码。“外部”相对“内部”而言;不是char或String在内存里用的内部编码的地方都可以认为是“外部”。例如,外部可以是序列化之后的char或String,或者外部的文件、命令行参数之类的。
    这里可以参考Java 字符串编码

更多参考

字符集和字符编码
编码研究笔记
学点编码知识又不会死:Unicode的流言终结者和编码大揭秘
十分钟搞清字符集和字符编码
UTF-8
The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)
程序员趣味读物:谈谈Unicode编码
字符集编码与乱码文集

相关文章

  • 比特--字节--字符--编码

    比特 计算机专业术语,是信息量单位,是由英文BIT音译而来。 二进制数系统中,每个0或1就是一个位(bit),位是...

  • 数据变量

    字符编码: 8bit = 8位=8比特 8比特(Bit)= 1字节(Byte)=1B 1字(Word)=2字节(B...

  • python 字符 编码 简述

    字符编码问题很简单,当你可以区分以下几种概念之后: 字节编码与字符编码 字节串与字符串 文件编码、IDE编码、其他...

  • Python 字符编码

    1、什么是字符编码 【ASCII编码由来】计算机只能处理数字(采用8个比特(bit)作为一个字节(byte)),如...

  • 笔记-encode与decode

    字节串-->decode('原来的字符编码')-->Unicode字符串-->encode('新的字符编码')--...

  • 大端字节序和小端字节序的理解

    参考编码字符集和字符编码介绍unicode和字节介绍

  • 字符编码的奥秘

    字符编码 你是否认为“ASCII码 = 一个字符就是8比特”?你是否认为一个字节就是一个字符,一个字符就是8比特?...

  • python字符串和编码

    字符编码: 8个比特(bit)作为一个字节(byte),一个字节最大整数255(二进制11111111=十进制25...

  • 从屌丝到架构师的飞越(IO流篇)-转换流

    一.介绍 字符流=字节流+编码集,在实际读取的时候其实字符流还是按照字节来读取,但是会更具编码集进行查找编码集字典...

  • Unicode编码和多字节编码

    wchar_t:unicode编码的字符char:多字节编码的字符TCHAR:根据环境转换字符类型的字符 "hel...

网友评论

      本文标题:比特--字节--字符--编码

      本文链接:https://www.haomeiwen.com/subject/cjdixxtx.html