码迷,mamicode.com
首页 > 数据库 > 详细

mysql 乱码专题

时间:2019-05-24 11:03:18      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:字符   12只   文件的   美国   进制   关系   压缩   就是   怎么   

二进制编码到 字符的映射就是字符集

 

最古老的字符集是ascii

看自己的键盘

A-Z

a-z

0-9

不超过127个,所以,美国人在造计算机的时候,就没考虑到还有其他的字符

所以一个字节可以表示256种值,所以

ascii

0-127来表示,只能用到7位

0xxxx xxxx,最高位始终是0

 

到了中国,常用汉字3000多,生僻汉字不用说。

1个字节不够表示

用2个字节表示,

0000 0000 0000 0000

1111 1111 1111 1111

0-65535种组合,够用

 

所以出现了GB2312 字符集

【69 197】   69 和197整个理解还是单理解为E

歧义:因为单字节小于127的值,正好是ascii的值,

如果就严格的2字节绑定,理解为中文,

则gb2312不能识别英文

 

如何兼容ascii,又能双字节表示中文?

ascii 0-127

干脆gb2312完全不占用0-127,

使用组合来自于

【129-255】【129-255】

但是同时,中文的组合数也少了,只能组合10000+,

事实上,gb2312只能容纳6000多字,

所以出现了gbk

 

gbk还是双字节,如何扩充容量

答:gbk的第二位,不再局限与129-255,<127也能用

碰到>128的,就在往后找一个字节,2个字节绑定为一个中文,继续找

gbk可存放20000+   

 

这就是ANSI,代表本地字符集,在中国是gbk,在日本就是jis。

 

后来就产生了unicode 代表国际化字符集

用4个字节来编号,unicode的实现方式称为utf8,即将Unicode简化后进行传输

unicode与utf-8的关系就像源文件与压缩文件的关系

 

uft8占几个字节?

1-6个字节,既然为变长,如何确定字符的边界?

最高位有几个1就表示几位

 

如何截取utf8(各国语言都有),无乱码?

答:从头开始,取一个字节,通过位运算,计算连续的1个字节,

如为0,则截取1个字节,

如为N,  则截取n个字节

 

从容量上来看,GB2312<GBK<UTF-8

 

问:gbk中文经常在java中,被准为utf-8,怎么转的?

答:gbk也是和unicode有对应关系的,

gbk->unicode->utf-8

 

乱码是怎么形成的?

答:1.解码时与实际编码不一致,即解码时用jis,编码时用gbk,可修复

  使编码与解码一致即可解决

  2。传输时,编码不一致,导致字节丢失。不可修复

  如将utf-8传输成gbk

 

mysql 乱码专题

标签:字符   12只   文件的   美国   进制   关系   压缩   就是   怎么   

原文地址:https://www.cnblogs.com/fbjtcp/p/10916524.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!