zoukankan      html  css  js  c++  java
  • [操作系统]字符|编码

    0 问题

    • 什么是字符?字符集?字符编码?编码表?
    • ASCII、UTF-8、GBK、GB2312、Unicode、Big5之间的关联关系?
    • 什么是:编码、解码、转码、乱码?
    • 乱码现象的本质是什么?导致乱码有哪些可能的原因?有哪些预防方法、解决方案?
    • 计算机是如何【存储】、【显示】:文字、图形(矢量)、图像(位图)?(原理、具体过程)

    1 概念

    1.0 编码 VS 解码

    1.1 字符 Character

    各种【文字】和【符号】的总称,包括:各国文字、标点符号、图形符号、数字等

    1.2 字符集 Character Set

    • 多个【字符的集合】,字符集种类较多,每个字符集包含的字符、字符个数均不同。
    • 常见的字符集名称:ASCII字符集、Big5(中文最早的编码表/字符集)、GB2312字符集、GBK字符集、GB18030字符集、Unicode字符集(万国码)
    • 计算机要准确地处理各种字符集文字,需进行字符集【编码】,以便计算机能够【识别、存储】各种文字。

    1.3 字符编码/字集码 Character Encoding

    字符编码,也称【字集码】;把字符集中的字符,【编码】为指定集合中的某一对象,以便文本在计算机中【存储】和通过【网络通信】进行传递。
    例如:

    • Unicode字符集可根据需要,以UTF-8、UTF-16、UTF-32等方法编码;
    • GB2312可使用ISO/IEC2022、EUC等标准编码
    • 而BIG-5这类字符集通常不需要编码,即可使用。即 BIG-5既是字符集,又是字符编码。

    1.3.1 ASCII码

    ASCII码(America Standard Code for Information Interchange),即 美国信息交换标准码。
    它已被国际标准化组织(ISO)定为国际标准,称为 ISO 646标准。
    适用于所有拉丁文字母。

    ASCII码是单字节编码,使用指定的7位或把8位二进制数组合起来表示128或256个字符。

    1.3.2 GBK编码

    GBK编码是汉字编码标准之一,全称《汉字内码扩展规范》,由中华人民共和国全国信息技术标准化技术委员会于1995年12月1日制订,由国家技术监督局标准化司、电子工业部科技与质量监督司于1995年12月15日以技监标函1995 229号文件的形式,将它确定为技术规范指导性文件。
    GBK即“国标”、“扩展”汉语拼音的首字母,英文名: Chinese Internal Code Specification。
    【GBK编码】兼容【GB2312】,GBK是对GB2312的扩充,中文Windows的默认/缺省内码就是GBK编码。

    'y'的码位:0389(03即03区)
    +0xA0,是为了达到GB2312向下兼容ASCII码时,需与ASCII码作区分,也便于计算机判别是GB2312还是ASCII

    1.3.3 Unicode编码

    Unicode字符集(编码),又称:统一码、万国码。(标准、规范、字符集)
    定义了这世界上几乎所有字符的表示,以满足跨语言、跨平台进行文本转换、处理的要求。
    且Unicode还兼容了许多老版本的编码规范,例如: ASCII码。

    • 【码点】 / 【Unicode转换格式(UTF)】
    【码点】是指Unicode给每个字符分配的数字ID,且具有唯一性。
    Unicode字符集可根据不同需要,以UTF-8、UTF-16、UTF-32等方法编码;
    【码点】的实现方式成为【Unicode转换格式】(Unicode Transformation Format,简称UTF)。
    【Unicode转换格式(UTF)】是为了解决【码点】在计算机的存储方式而设计的;
    UTF-8、UTF-16、UTF-32都是将【文字/符号】转换到【程序数据】的编码方案。
    
    • 【码元】(Code Unit)
      码点经映射后得到的二进制串的【转换格式单位】,称之为:【码元】(Code Unit)。
      【码点】就是一串二进制数,而【码元】就是切分这个二进制数的方法。
    [示例1] 假定字符x的码点二进制表示有N字节(N*8个二进制数),其每个码元为8位(1个字节),则:
    其拥有N个码元。
    
    [示例2]
    UTF-8  即 每读码点的08位(码元:08位),就代表1个字符。每08位去读下一个码点。
    UTF-16 即 每读码点的16位(码元:16位),就代表1个字符。每16位去读下一个码点
    
    • 【UTF-8编码】
      【UTF-8编码】是在互联网上【使用最广】的1种【Unicode字符集实现方式】,它是1种【可变长的编码方式】,它可以使用1-4字节表示1个字符,根据不同的符号而变化字节长度。
      1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的Unicode码。因此,对于英文字母,UTF-8和ASCII码是相同的。
      2)对于N字节的符号(N>1),第一个字节的前N位都设为1,第N+1位设为0,后面字节的前2位一律设为10。剩下的没有提及的二进制位,全部为这个符号的Unicode码。

    2 参考

    3 推荐

  • 相关阅读:
    一维数组的相关问题
    逗号表达式
    三目表达式
    前自增和后自增的比较
    关于Spring中的PagedListHolder分页类的分析
    fmt:formatDate标签的输出格式
    用java流方式判断文件类型
    常用文件的文件头(附JAVA测试类)
    jsp页面判断文件上传类型
    spring MVC上传文件演示
  • 原文地址:https://www.cnblogs.com/johnnyzen/p/13339584.html
Copyright © 2011-2022 走看看