zoukankan      html  css  js  c++  java
  • 字符编码

    ASCII

    ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)

    产生

    在计算机中,所有的数据在存储和运算时都要使用二进制数表示,例如,像a、b、c、d这样的52个字母(包括大写)、以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,为了在互相通信中不造成混乱,就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示。

    格式

    ASCII 码使用指定的7位或8位二进制数组合来表示128或256种可能的字符

    • 0~31及127(共33个)是控制字符或通信专用字符(0000 1101 13是回车)
    • 32~126(共95个)是字符(0010 0000 32是空格)
    • 48~57为0到9十个阿拉伯数字。
    • 65~90为26个大写英文字母
    • 97~122号为26个小写英文字母,其余为一些标点符号、运算符号等
    • 其最高位(b7)用作奇偶校验位。
    • 后128个称为扩展ASCII码。扩展ASCII码允许将每个字符的第8位用于确定附加的128个特殊符号字符、外来语字母和图形符号。

    MBCS

    为了扩充ASCII编码,以用于显示本国的语言,不同的国家和地区制定了不同的标准,由此产生了 GB2312, BIG5, JIS 等各自的编码标准。这些使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码,又称为"MBCS(Muilti-Bytes Charecter Set,多字节字符集)"

    GB2312

    GB2312 是ANSI编码里的一种,对ANSI编码最初始的ASCII编码进行扩充,为了满足国内在计算机中使用汉字的需要,中国国家标准总局发布了一系列的汉字字符集国家标准编码,统称为GB码,或国标码。

    GB2312格式

    GB2312编码用两个字节(8位2进制)表示一个汉字,所以理论上最多可以表示256×256=65536个汉字。但这种编码方式也仅仅在中国行得通,如果您的网页使用的GB2312编码,那么很多外国人在浏览你的网页时就可能无法正常显示,因为其浏览器不支持GB2312编码。

    GBK

    GBK即汉字内码扩展规范,K为扩展的汉语拼音中“扩”字的声母。英文全称Chinese Internal Code Specification。GBK编码标准兼容GB2312

    GBK格式

    GBK采用双字节表示,总体编码范围为8140-FEFE,首字节在81-FE 之间,尾字节在40-FE 。

    Unicode

    Unicode是一种在计算机上使用的字符编码。Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换处理的要求。这样就可以解决之前提到的不用编码间显示乱码问题。

    但是Unicode只是规定了唯一的编码,但是编码方式是多样的。ASCII表示的字符使用UNICODE并不高效,因为UNICODE比ASCII占用大一倍的空间,而对ASCII来说高字节的0对他毫无用处。为了解决这个问题,就出现了一些中间格式的字符集,他们被称为通用转换格式,即UTF(Universal Transformation Format)。常见的UTF格式有:UTF-7, UTF-7.5, UTF-8,UTF-16, 以及 UTF-32。

    UTF-8

    UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码

    UTF-8格式

    琪 (0111-0100-0010-1010)

    • ANSI: "E7 F7" 这就琪的GB2312编码 是采用大头方式存储的
    • Unicode:"FF FE 2A 74" 其中FF FE表明使用小头方式存储,整整的编码是742A
    • Unicode big endian: "FE FF 74 2A" 其中FE FF表明是大头方式存储
    • UTF-8:"EF BB BF E7 90 AA" 其中EF BB BF 表示uft-8存储

    从"琪"的最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0
    (1110xxxx 10xxxxxx 10xxxxxx)--utf8->(11100111-10010000-10101010)--16进制->E790AA

    大头与小头存储(Big endian / Little endian)

    小端(低尾端):是指数据的高字节保存在内存的高地址中,而数据的低字节,保存在内存的低地址中
    大端(高尾端):是指数据的高字节保存在内存的低地址中,而数据的低字节,保存在内存的高地址中

    个人记忆:大端也就是高尾端,就是尾端放在高地址..比如12345678中 78显然是字符的尾段 则12 34 56 78 (低地址-->高地址)这样看起来很正常的排列就是大端..而78 56 34 12 (低地址-->高地址)这种尾段在低地址 看起来很别扭的方式就是小端..

    原帖链接:http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

  • 相关阅读:
    EF框架开发后台错误问题集合
    如何实践MVP+RxJava+Retrofit(1)
    Android的FixScrollView自定义控件
    那些React-Native踩过的的坑
    P3105 [USACO14OPEN]公平的摄影Fair Photography
    模板合集
    关于最近情况的说明
    落谷P3941 入阵曲
    51nod 1952 栈
    BZOJ 2298: [HAOI2011]problem a
  • 原文地址:https://www.cnblogs.com/dyakira/p/4738489.html
Copyright © 2011-2022 走看看