Java Web中文编码问题

计算机中存储的基本单元是字节,1字节=8bit,能表示的字符范围是0~255

编码方式:

ASCLL码:总共128个,1字节的低7位表示,0~31是控制字符,如换行回车删除;32~126是打印字符,可以输入并显示

ISO-8859-1:包含大部分西欧语言字符,仍然是单字节编码,可表示256个字符

GBK:汉字内码规范,可表示21003个汉字

UTF-16:用两个字节来表示Unicode的转化格式,采用定长的表示方法,不论什么字符都可以用两个字节表示,两个字节就是16bit,两个字节可以表示一个字符,大大简化了字符串操作,这也是java使用UTF-16作为内存的字符存储格式的一个很重要的原因

UTF-8:UTF-16的缺点,定长,占用空间大,占用网络带宽;UTF-8采用变长的技术,每个编码区域都有不同的字码长度,不同的字符可由1到6个字节组成

UTF-8的编码规则:

如果是一个字节,最高位为0,表示这是一个ASCLL字符,可见ASCLL编码已经是UTF-8了

如果是一个字节,以11开头,连续的1的个数暗示这个字符的字节数,110XXXX代表双字节

如果是一个字节,以10开始,表示他不是首字节,需要向前查找才能得到当前字符的首字节

GBK编码:字符占一个字节,汉字占两个字节

UTF-16:字符,汉字都是占两个字节

UTF-8:字符占一个字节,汉字占三个字节

UTF-16相较UTF-8:

UTF-16更浪费空间,采用顺序存储,无法对单个字符的编码值进行校验,中间一个字符码值损坏,后面的码值都将受影响

UTF-16编码效率高,字符到字节转换更简单,适合本地磁盘和内存之间使用,进行字符到字节的快速切换;但是不适合网络传输,损坏以后难以恢复,UTF-8更适合

URL的编解码:

浏览器编码URL是将非ASCLL字符按照某种编码格式编码成16进制数字后将每个16进制表示的字节前加%;

解码时tomcat服务器配置,<Connector URIEncoding="UTF-8"  useBodyEncodingForURI="true" />

常见问题:

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值