跟燕十八学习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,
容量大 容量小
丢失了字节?


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

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

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

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


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


转载于:https://www.cnblogs.com/phperlang/archive/2012/11/02/2751835.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值