1、unicode的诞生
    首先明白计算机能识别的都是二进制010101010这种代码,但是这些010010111人是难以看懂的,于是美国人就用ASCII码制作了一张表,里面包含从a、b、c.......@%$等128个字符差不多半个字节(1111,1111==256   0111,1111==128),为了以后扩充方便就取了一个字节,最高位是0,就这样将英文字符、字符、数字128个包含进去了,下次计算机的0101这种二进制代码就直接查这个ASCII表就知道对应的字符。

但是,美国用的字母,德国,英国。。。最重要的我们中国汉子几万个,一张表存不下啊。

于是聪明的中国人发明了GBK编码表,gbk编码规定,计算机不能在每次都只读一个字节(00000000,8位表示一个字节)那么死板了,你要先看看第一位是不是为0,要是为0 的话,就当作ASCII码来读入一个字节,不然的话就读入两个字节(汉子太多一个字节存不下,读入两个字节表示汉字就查GBK)。

那么每个国家一个表,这可就尴尬了,相互通信的时候由于解码方式不同就会导致乱码(用ASCII发邮件,计算机查ASCII表转换成对应0101010二进制,接收的人用GBK解码,将010101取查GBK肯定就查不到啊)。

于是,国际组织就发明了一套公用的表unicode编码,将所有国家,所有字符都收进去了从0一直到100多万(用三个字节)

2、utf-8的产生
    虽然世界通用的表unicode是有了,但是有人就发现这有点浪费资源啊。每次让计算机读取三个字节然后参照Unicode表解码,那么像a、b...0、1、2...这些一个字节就够了的就太浪费了。

于是uft-8,utf-16,utf-32这些编码方案就出现了。utf-16是用两个字节来编码所有的字符,utf-32则选择用4个字节来编码,utf-8为了节省资源,采用变长编码,编码长度从1个字节到6个字节不等。可由于互联网大部分是1个字节(代码很多英文的),所以最后大家选择用的最多的还是utf-8。

总结一句就是

=====================

unicode 是一种包含所有字符的编码表格,例如,给一个汉字规定一个代码,一个字母也一个代码。
=====================
一个unicode码可能转成长度为一个BYTE,或两个,三个,四个BYTE的UTF8码,取决于unicode码的值(utf-8可变长)。

英文unicode码因为值小于十六进制表示的0x80(即8x16=128,即01111111=128,即一个字节就可以表示了),只要用一个BYTE的UTF8传送,比送unicode两个BYTEs快。

UTF8是为传送unicode而想出来的“再编码”方法罢了,将unicode编码之后再在网络传输。

因此,UTF-8最适合用来作为字符串网络传输的编码格式,自动变长节约空间嘛。解码的时候按UTF-8先解码成unicode,在查unicode表解码二进制,如下图:

utf-8、unicode区别与联系相关推荐

  1. Python str / bytes / unicode 区别详解 - Python零基础入门教程

    目录 一.前言 二.Python str / bytes / unicode 区别 1.Python2.x 版本中 str / bytes / unicode 区别 2.Python3.x 版本中 s ...

  2. UTF、Unicode、ASCII及中文编码

    一.Unicode缘起 Unicode是一种字符编码规范 . 1.国际标准ASCII编码 先从ASCII说起.ASCII是用来表示英文字符的一种编码规范,每个ASCII字符占用1个字节(8bits)  ...

  3. Unity中获取字符串长度、Unicode字符数量和编码ASCII,UTF,GBK的区别

    1.String.Length,String.ToCharArray,StringInfo,Encoding.UTF8.GetByteCount的区别: String.Length:获取的是字符串中C ...

  4. Go 学习笔记(31)— 字符串 string、字符 rune、字节 byte、UTF-8 和 Unicode 区别以及获取字符串长度

    1. 字符串 string 类型 Go 语言中字符串的内部实现使用 UTF-8 编码,通过 rune 类型,可以方便地对每个 UTF-8 字符进行访问.当然, Go 语言也支持按照传统的 ASCII ...

  5. mfc从文件中读取数据_Python 中的 bytes、str 以及 unicode 区别

    从Python发展历史谈起 Python3和Python2表示字符序列的方式有所不同. Python3字符序列的两种表示为byte和str.前者的实例包含原始的8位值,即原始的字节:后者的实例包括Un ...

  6. 关于编码ansi、GB2312、unicode与utf-8的区别

     关于编码ansi.GB2312.unicode与utf-8的区别 2014-01-25 08:51 529人阅读 评论(0) 收藏 举报 本文章已收录于: 关于编码ansi.GB2312.uni ...

  7. AJPFX解析关于编码ansi、GB2312、unicode与utf-8的区别

    大家平时遇到乱码问题是否有自己的一套解决方案?这篇文章就是介绍一下常用的编码方式 关于编码ansi.GB2312.unicode与utf-8的区别 先做一个小小的试验: 在一个文件夹里,把一个txt文 ...

  8. 代码点与代码单元和Unicode相关的UTF

    java字符串由char序列组成,char数据类型是一个采用UTF-16编码表示Unicode代码点的代码单元,大多数的常用Unicode字符使用一个代码单元就可以表示,而辅助字符需要一对代码单元来表 ...

  9. ansi、unicode、UCS、UTF等概念(转)

    一.ansi定义 不同的国家和地区制定了不同的标准,由此产生了 GB2312, BIG5, JIS 等各自的编码标准.这些使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码.在 ...

最新文章

  1. linux 约等于符号,Mac OS X基础教程:特殊符号的快捷输入方式
  2. jquery拓展插件开发
  3. Matlab中下标,斜体,及希腊字母的使用方法
  4. js怎么调用wasm_Long.js源码解析
  5. 一流程序员靠数学,二流程序员靠算法,低端看高端就是黑魔法
  6. Spring 3,Spring Web Services 2和LDAP安全
  7. STM32F7xx —— Timer
  8. filezilla:阿里云 win10 服务器文件传输(上传和下载)的配置教程
  9. kafka自定义序列化器
  10. 找到恶意软件包:Go 语言生态系统中的供应链攻击是怎样的?
  11. 机器学习问题的十个实例
  12. 毕设题目:Matlab优化分配
  13. Category底层原理实现
  14. 被伽卡他卡禁用任务管理器如何解决
  15. 怎样用sc命令运行服务器,windows中的sc控制服务命令
  16. 关系网络lbs的应用_冒泡网王江:熟人关系将成LBS最重要商业模式
  17. MVC、POJO、PO、DTO、TO、BO、VO、DAO、domian、delegate、sql
  18. 手把手教你使用Python生成图灵智能小伙伴,实现工作助手/闲聊功能
  19. 9月28日科技资讯|华为发布全容器化 5G 核心网;余承东评小米 MIX Aphla 手机无实用价值;PHP 新版本更新
  20. 最大子段和之M子段和

热门文章

  1. (转)CString工作原理和常见问题分析
  2. 【Keras】减少过拟合的秘诀——Dropout正则化
  3. Linux运维之道之ENGINEER1.3(配置SMB共享,配置NFS共享)
  4. E-MapReduce解决hive comment中文乱码问题
  5. 中小企业集群ntpd服务搭建
  6. jQuery 对象与Dom 对象互转
  7. python自动化运维之python2.6升级2.7和集中病毒扫描
  8. Linux 查看内存插槽数、最大容量和频率
  9. sublimetext3安装配置
  10. Centos7使用yum下载rpm包而不执行安装