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

           

            在浏览网页,编敲代码时,偶尔会碰到一些乱码问题。

    比如在打开一个网页时。没有一个正常字符可辨识的。全是一些奇怪的符号,方块、问号等等。

    通过浏览器的tools->encoding选择UTF-8或者GBK。显示就正常了。为什么会乱码。UTF-8和GBK又是什么东西呢?

            汉子,字母等字符。我们能够识别。并理解它们的表达信息。但计算机不能直接识别这些字符。它仅仅能理解二进制信息。

    为了让计算机能够处理。表示字符。我们须要将字符转换成二进制表达,交给计算机处理。再将计算机处理输出的二进制信息转换成字符。

    所以这里须要一种字符与二进制的一对一映射关系。在计算机发展早期,用英文字符基本能够搞定一切,所以ASCII用32-127数值能够表示全部的字母和符号。小于32的数值表示非打印的控制字符。例如以下所看到的:


             随着计算机的普及。世界各国都在使用。

    他们的字符也须要用计算机来存储和表示。我们中文也一样。为了可以表达全部的字符,unicode产生了,并成为了标准。unicode涵盖世界上全部字符到代码值(code point)的映射[2],如“A”的映射为U+0041,“中”的映射为U+2D2E。

           尽管unicode定义了字符到代码值的映射,但它并没有规定计算机怎样来存储这个代码值。于是就有了UTF-16的产生,UTF-16直接将代码值中数值作为字符的二进制表示,这样每一个字符基本都占用两个字节,如“中”,用“x2Dx4E”表示了。

    这么一弄,美国人不干了,他们原本一个字符仅仅要一个字节表示就行。如今须要两个字节。所需存储资源无故多了一倍。所以他们大部分还是继续使用ASCII,UTF-16表示非常尴尬。为了解决问题。聪明的 UTF-8出现了,它可以使英文字符的编码与ASCII保持一致,而其它的字符则可能用很多其它字节表示。

    这样就不用添加美国人的内存消耗,只是其它国家可能要多牺牲一点内存了。

    How UTF-8 works

    UTF-8的编码格式


           这样中文的每一个字符也无故多用了一个字节,嗯,想想有点浪费。

    所以我们也有了自己的编码格式。如GBK。英文字母的编码格式与ASCII保持一致,中文字符採用两字节表示。其他国家的字符就管不了那么多了。只是其他国家基本也都有自己的编码格式。

           例如以下所看到的,GBK、Big5、UTF-8、UTF-16四种编码协议定义“中”字的在计算机中的二进制表达为: 

       GBK      Big5        UTF-8     UTF-16
      ~xD6xD0  xA4xA4  xE4xB8xAD  x2Dx4E
             所以假设我使用GBK将“中”编码为“xD6xD0”,并存放文件file.txt中,然后发给你。假设你使用UTF-8对该文件进行解码。会发现该文件显示"�",换成GBK解码,就正常了。
           简单点说:unicode规定字符到代码值的映射。代码值虽不直接存放于计算机上,但大家都必须认可某一代码值仅仅能表示某一字符,所以能够觉得代码值是字符在计算机层一个抽象。UTF-8、GBK等编码协议规定计算机如何来存储代码值。如:是用几个字节来存储代码值呢,这些字节如何来表示这个代码值呢?


    參考文献
    [1] http://www.joelonsoftware.com/articles/Unicode.html
    [2] http://www.unicode.org/

  • 相关阅读:
    获取地址栏的key-value形式的值(包括重复的key值)形成对象--重复的变成数组形式
    vue---定时循环setInterval
    动画效果----webkit-animation-----动画背景变化transition:background-color 1s linear;
    background-clip--背景是否填充
    box-sizing盒子的大小,修改文字种类而保持字体大小不变font-size-adjust,----块级和内联display---盒子阴影box-shadow---对盒子中容纳不下的内容的显示overflow
    地图api学习第一天
    文字添加阴影
    css循环样式: nth-child(n)
    es6语法
    将中国标准时间--转换为yyyy-MM-dd 时分秒
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/7144538.html
Copyright © 2011-2022 走看看