博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
utf8编码
阅读量:6765 次
发布时间:2019-06-26

本文共 1222 字,大约阅读时间需要 4 分钟。

hot3.png

utf8编码

关于编码问题:

首先需要知道什么是编码为什么要编码, 计算机只能存储一个字节一个字节的二进制信息,所以需要把人可读的这些文字用唯一的方式在计算机内部表示出来, 但是表示的方法不唯一;

例如英文字符 就那么点 所以一个字节 也就是 8个二进制位就能给所有的进行编码,最多能给256个符号编码; 但是ASCII 编码实际只使用了 7位 所以最多编码 128个字符。

但是汉字就不行了, 常用的汉字大概6000多个, 所以 至少需要两个字节, 所以中国government给出了两个字节的编码方案, 叫做GBxxxx (国标的意思)

两个字节16位 最多 有65536 个字符, 所以 给这些汉字用是足够了,但是有个问题 如何让GB码和ASCII码互相兼容, 即这65536 个字符里面关于那些英文字符的编码 在GB码和ASCII码中要一致

方法很简单 要求所有最高位为0的编码表示的是ASCII码, 最高位为1的编码是GB码;

这样实际最多就只能表示32768个汉字了;

但是GB国标码只能在中国用, 世界人民怎么办呢?世界有那么多的语言,每种语言都应该有编码 所以有了一个叫做unicode 统一编码的东西出现了;Unicode是制定的可以容纳世界上所有文字和符号的字符编码方案。Unicode用数字0-0x10FFFF来映射这些字符(见百度百科http://baike.baidu.com/view/40801.htm)

当然最后还有一个我们经常见到的UTF8编码, 这个是什么东西?

UTF全称 是Unicode Transformation Format 即unicode 编码的变形形式;

unicode编码是定长度的, 但是对于ASCII字符来讲 有点浪费了, 可以用一个字节表示 ASCII字符, 用多个字节表示 汉字什么的, 这就是变长度编码方式了, 那就需要对unicode编码进行一些变形;

UTF-8的定义:
0开头 latin字符
10开头 一个字符连续字节中的某一个
1111xxx 一个多字节字符的开始  前导1的个数表示字节个数 前导1后面紧跟一个0
汉字一般3个字节
unicode是统一编码
utf8是对unicode的转换编码
unicode    utf8
0xxxxxxx -> 0xxxxxxx   latin 转化成自身
00000yyy  yyxxxxxx  -> 110yyyyy  10xxxxxx  两字节 转化成 两字节
zzzzyyyy  yyxxxxxx->1110zzzz 10yyyyyy 10xxxxxx  两字节转化成三字节(一般汉字就是如此)
000wwwzz zzzzyyyy yyxxxxxx -> 11110www 10zzzzzz 10yyyyyy 10xxxxxx 三字节转化成4字节

转载于:https://my.oschina.net/u/186074/blog/381150

你可能感兴趣的文章
grunt简单的入门
查看>>
关于css浮动
查看>>
C Primer Plus 第2章 C语言概述
查看>>
每刻途,一个神奇的网站
查看>>
Zookeeper之——关于Zookeeper的那些事
查看>>
Spring 与 ActiveMQ 整合代码
查看>>
类的定义
查看>>
SOLR--7--传统关系型数据库在全文检索中的劣势
查看>>
代码上线流程以及版本发布小结
查看>>
MySQL多表查询
查看>>
如何挑选适合的前端框架?
查看>>
Linux安装Python3.6.5
查看>>
关于ArrayList的5道面试题
查看>>
java 中hashcode 与 equals的关系
查看>>
Java多线程系列--“JUC原子类”02之 AtomicLong原子类
查看>>
WEB调试工具--FireBug的使用技巧
查看>>
Oracle数据库恢复数据
查看>>
国产服务器的安全监控之法
查看>>
C#事件理解
查看>>
代码规范
查看>>