utf8编码

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字节

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java emoji表情存储解决方案

1.问题产生情况我遇到这个问题是做微信开发的时候有些有用的头像用了微信的emoji表情,然而我的mysql数据库用的编码是utf8\_general\_ci,就是utf8编码,结果也就报错误了。2.为什么会出现这种原因因为mysql的utf8编码的一个字符最多3个字节,但是一个emoji表情为4个字节,所以utf8不支持存储em

Twitter的分布式自增ID算法snowflake (Java版)

概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移