跟燕十八学习PHP-第三十天-MySQL字符乱码解决





/** 
燕十八 公益PHP培训 
课堂地址:YY频道88354001 
学习社区:www.zixue.it 
**/






编码问题:




计算机里,只有010101 
而人的世界里,有文字,有图片,有声音....




01 ---> 文字对应起来




人为的约定


65->A
66->B
...
...




0100 0001 [A,65]


2进制编码 到 字符的映射,就是字符集.






看自己的键盘


A-Z 
a-z
0-9
+-*/&^% 


不超过127个.


美国人在造计算机的时候,就没考虑到,还有其他的字符.


















1111 1111 
0000 0000  256种值,


1个字节8个位 就足够了.


事实上,7个位就够了,因为7个位,可能表示128种变化.




ascii
0-127来表示


0xxx xxxx ,最高位始终是0




到了中国


常用汉字3000多,生僻汉字不用说.




1个字节,够不够?
答:不够,任你变,不过256种.


思考:用2个字节来表示
[][]


0000 0000 0000 0000
1111 1111 1111 1111
0-> 65535,6万多种组合,够用了.


GB2312字符集 


[202 197] 假如代表 中
[69 197] 代表 ? 
[200 101]


202 197 69 197 200 101....


69和197整个理解,还是单理解成E


歧义: 就是因为单字节的小于127的值,正好是ascii的值.
如果就严格的2字节绑定,理解为中文,
则gb2312不能识别英文了.




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


ascii 0-127


0xxxx xxxx


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






我的组合来自于
[129-255][129-255] 




130 140 97 95 134 198
看:能几个中文,几个英文?




但是,中文的组合数,也少了.
只能组合10000+,
事实上,GB2312只能容纳6000多字






GBK还是双字节,如何扩充容量?
答:


GBK的第2低,低位,不再局限于129-255了,<127的也能用


140 35 65 179 82
 问:几个中文,几个英文?


总结: 碰到>128的,就再往后找一字节.2字节理解成中文.
继续找,


找到>128的,就带个家属. ,127的,就单身






中国 GBK 
[137][134] ->中


到了日本呢?


[137][134]-> す ふに 呆


jis




ANSI 代表本地字符集


在中文操作 GBK
在日本  JIS




中文-->
中华人民颐和园


拿到日本-->读-->乱?




解决了多字节之后, 又相来一个问题----世界各国的字符集,兼容问题.






终极大招: Unicode






unicode是一个世界通用的码表


00000000 0000 0041 -->A
......................中
..................->す




全世界的范围的字符,统一分配一个标号.


这样,不会乱了.




unicode用4个字节,来编号


2^32 ,40多亿, 天文数字. 足够用了




但我们常用的,集中在 前65535个标号里.
2个字节就够了.


但是,unicode只负责分配编号用的,而且都用4个字节来分配编号.


你负责编号,


我负责在不改变你编号的基础上,简化字节.


0000 0000 0000 0000 0000 0000 0000 0041 ->A


0000 0041 ->A




把高位浪费的0值,用一定的规则舍弃.




形成的编码方式 ,  






unicode与utf-8的关系


就像原文件  --> 压缩文件的关系.


问: 给定unicode字符---> utf-8的二进制值?






 utf-8的二进制值?--->unicode字符






utf8占几个字节呢?


不可能定长,否则压缩还有什么意义?


变长,如何确定字符的边界?




23 179 234 123




如何截取utf8(各国语言都有),无乱码?
答: 从头开始,取1个字节.
通过位运算,计算连续的1的个数.


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






从容量上来看


GB2312 < GBK < UTF-8








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


GBK 也是和unicode有对应关系的.


GBK->unicode->utf-8




乱码是如何形成的?






utf-8-->转成gb2312,
容量大    容量小
丢失了字节?




连接器的特性: 连接客户端与服务器


客户端的字符先发给连接器


连接器选择一种编码将其转换,临时存储


再次转换成 服务器需要的编码,并存储在服务器




燕十八老师太幽默了, 昨天的视频如下:


http://www.tudou.com/programs/view/5xOUBkB_T4Q/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值