utf-8、unicode区别与联系
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区别与联系相关推荐
- Python str / bytes / unicode 区别详解 - Python零基础入门教程
目录 一.前言 二.Python str / bytes / unicode 区别 1.Python2.x 版本中 str / bytes / unicode 区别 2.Python3.x 版本中 s ...
- UTF、Unicode、ASCII及中文编码
一.Unicode缘起 Unicode是一种字符编码规范 . 1.国际标准ASCII编码 先从ASCII说起.ASCII是用来表示英文字符的一种编码规范,每个ASCII字符占用1个字节(8bits) ...
- Unity中获取字符串长度、Unicode字符数量和编码ASCII,UTF,GBK的区别
1.String.Length,String.ToCharArray,StringInfo,Encoding.UTF8.GetByteCount的区别: String.Length:获取的是字符串中C ...
- Go 学习笔记(31)— 字符串 string、字符 rune、字节 byte、UTF-8 和 Unicode 区别以及获取字符串长度
1. 字符串 string 类型 Go 语言中字符串的内部实现使用 UTF-8 编码,通过 rune 类型,可以方便地对每个 UTF-8 字符进行访问.当然, Go 语言也支持按照传统的 ASCII ...
- mfc从文件中读取数据_Python 中的 bytes、str 以及 unicode 区别
从Python发展历史谈起 Python3和Python2表示字符序列的方式有所不同. Python3字符序列的两种表示为byte和str.前者的实例包含原始的8位值,即原始的字节:后者的实例包括Un ...
- 关于编码ansi、GB2312、unicode与utf-8的区别
关于编码ansi.GB2312.unicode与utf-8的区别 2014-01-25 08:51 529人阅读 评论(0) 收藏 举报 本文章已收录于: 关于编码ansi.GB2312.uni ...
- AJPFX解析关于编码ansi、GB2312、unicode与utf-8的区别
大家平时遇到乱码问题是否有自己的一套解决方案?这篇文章就是介绍一下常用的编码方式 关于编码ansi.GB2312.unicode与utf-8的区别 先做一个小小的试验: 在一个文件夹里,把一个txt文 ...
- 代码点与代码单元和Unicode相关的UTF
java字符串由char序列组成,char数据类型是一个采用UTF-16编码表示Unicode代码点的代码单元,大多数的常用Unicode字符使用一个代码单元就可以表示,而辅助字符需要一对代码单元来表 ...
- ansi、unicode、UCS、UTF等概念(转)
一.ansi定义 不同的国家和地区制定了不同的标准,由此产生了 GB2312, BIG5, JIS 等各自的编码标准.这些使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码.在 ...
最新文章
- linux 约等于符号,Mac OS X基础教程:特殊符号的快捷输入方式
- jquery拓展插件开发
- Matlab中下标,斜体,及希腊字母的使用方法
- js怎么调用wasm_Long.js源码解析
- 一流程序员靠数学,二流程序员靠算法,低端看高端就是黑魔法
- Spring 3,Spring Web Services 2和LDAP安全
- STM32F7xx —— Timer
- filezilla:阿里云 win10 服务器文件传输(上传和下载)的配置教程
- kafka自定义序列化器
- 找到恶意软件包:Go 语言生态系统中的供应链攻击是怎样的?
- 机器学习问题的十个实例
- 毕设题目:Matlab优化分配
- Category底层原理实现
- 被伽卡他卡禁用任务管理器如何解决
- 怎样用sc命令运行服务器,windows中的sc控制服务命令
- 关系网络lbs的应用_冒泡网王江:熟人关系将成LBS最重要商业模式
- MVC、POJO、PO、DTO、TO、BO、VO、DAO、domian、delegate、sql
- 手把手教你使用Python生成图灵智能小伙伴,实现工作助手/闲聊功能
- 9月28日科技资讯|华为发布全容器化 5G 核心网;余承东评小米 MIX Aphla 手机无实用价值;PHP 新版本更新
- 最大子段和之M子段和