zoukankan      html  css  js  c++  java
  • ASCII,Unicode,UTF8编码的认识

      最早的计算机是由美国人发明的,最早的编码系统就是ASCII码,通过八位二进制(一个字节)表示128个字符abcAbc+- 等等。。。

      问题来了:那么ASCII码只能表示英文字符和些特殊符号,那其他非英语国家怎么办呢?

      于是中国发明了gbk编码,印度发明了....

      世界编码变得混乱,于是国际组织发布了一套编码,把所有编码归纳进来=>Unicode编码。这套编码表的编号从0一直算到了100多万(三个字节)。每一个区间都对应着一种语言的编码。目前几乎收纳了全世界大部分的字符。所有的字符都有唯一的编号,这就解决了解码的冲突,于是天下大定!

      问题又来了:Unicode把大家都归纳进来,为解决了字符的显示,却没有为编码的二进制传输和二进制解码做出规定。  

      如果使用Unicode码表解码的话,每次都使用三个字节来存储,传输一个字符,这样就会造成资源浪费,本来一个ASCII码就可以所有英文字符了,所以美国人当然不愿意了。

      于是,就出现了如下解决方案:uft-8,utf-16,utf-32这些编码方案。utf-16是用两个字节来编码所有的字符,utf-32则选择用4个字节来编码。下面只讲一下utf-8这种解决方案,因为它用的最多,用得最多是因为在当时它的方案最好,最节省资源。

      UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

        1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编  码和ASCII码是相同的。

        2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为    10。剩下的没有提及的二进制位,全部为这个符号的unicode码。

      

      在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码

      

      

  • 相关阅读:
    xtrabackup执行备份要拥有的权限
    CentOS 7 下yum安装xtrabackup备份工具
    MySQL read_only选项的作用
    Linux进程管理命令
    MySQL二进制日志中保存的上下文信息
    MySQLdb的安装
    MySQL The password hash doesn't have the expected format.
    web框架本质
    进程和线程
    good blog
  • 原文地址:https://www.cnblogs.com/Thomas-blog/p/9624545.html
Copyright © 2011-2022 走看看