utf-8从此解决所有编程中的乱码处理

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

01==>与文字对应


人为的约定
65->A
66->B
...
...

0100 0001 代表:A还是65 要看规则

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

A-Z
a-z
+_*&^%$#@!

不超过127个.

美国人造计算,就考虑到自己使用,能表示127 个字符就行

一个字节就够存储127 个字符

1111 1111
0000 0000  256种值
1个字节8个位,就足够了.
事实上,7个位就够了,7个位表示128中变化

ASCII
0-127 来表示的
0xxx xxxx ,最高位始终是0

*/


/*
中国
常用汉字3000多,生僻汉字不用说.

1个字节,够不够?
答:不够,最多不过256种。

 

思考:用2个字节来表示
1111 1111 1111 1111
0000 0000 0000 0000
0->65535,6万多种组合,够用了


GB2312 字符集

GBK
GBK还是双字节,如何扩充容量
答:
GBK的第2位,低位,不在局限于129-255,小于127的也能用

140 35 65 179 82
问:几个中文,几个英文?
总结:碰到>128的,就在往后找一个字节,2个字节理解成中文。

找到大于128的,就带一个字节==》合起来表示一个字符
小于128的就是一个字节==》表示一个字符

 

日本使用JIS字符集


世界各国字符集,兼容问题
国际通用码表:unicode
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-82进制值?
答:当然能,互相推出。编码与解码的关系


unicode 和utf-8 转换关系表
4个字节 ---> 1个到6个字节  不固定用几个字节,关键看对应 的规则              

utf-8占几个字节呢?
答:1个到6个字节  不固定用几个字节。


utf-8变长,如何确定字符的边界呢?

最高位
0xxxxxxx
11xxxxxx xxxxxxxx
111Xxxxx xxxxxxxx xxxxxxxx
1111xxxx xxxxxxxx xxxxxxxx xxxxxxxx
11111xxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx
111111xx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx

最多用到6个字节

如何截取utf-8编码时无乱码?
答:
1:从头开始取一个字节,
通过位运算,计算连续1的个数

如为0,则截取1个字节
如为11,则截取2个字节
如为111,则截取3个字节
...
...
如为111111,则截取6个字节

 

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

问:GBK中文在java中,被转为utf-8 ,怎么转的?
答:GBK 和unicode有对应关系
通过中间unicode码表转的
GBK -> unicode ->UTF-8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mumu_wangwei

主修"红尘道--红尘练心"

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值