java中a的码_java中的编码

一.在I/O中存在的编码

1.读,Reader,InputStream,InputStreamReader。

Reader是读字符的父类,InputStream是读字节的父类,InputStreamReader是读取字节到字符的桥梁,它是委托StreamDecoder去做的。

2.写,Writer,OutputStream,OutPutStreamWriter。

Writer是写字符的父类,OutputStream是写字节的父类,OutputStreamWriter是写字符到字节的桥梁,它是委托StreamEncoder去做的,它负责将字符编码为字节。

二.内存操作中的编码

1.String进行字节与字符的转换

字符到字节:byte [] b = s.getBytes("UTF-8");

字节到字符:String n = new String(b,"UTF-8");

2.用Charset进行转换

Charset charset = Charset.forName("UTF-8");//设置编码

ByteBuffer byteBuffer = charset.encode(string);//char 到 byte

CharBuffer charBuffer= charset.decode(byteBuffer );//byte 到 char

三.JavaWeb中的编码

1.url中的编码

uri:一般浏览器对PathInfo和QueryString的编码是不一样的,Tomcat在接收这个URL再转成char是在org.apache.catalina.connector.ConyoteAdapter的convertURI的方法里面完成的,如果没有设置默认是ISO-8859-1编码,所以有中文URL最好把URIEncoding设置为UTF-8.

QueryString:GET方法的HTTP请求的QueryString和POST方法提交的表单参数都是以Parameters保存的,解码会调用parseParaments。QueryStringd的解码字符集要么是Header的ContentType定义的Charset,要么是默认的ISO...,所以服务器最好设置中的URIEncodeing为UTF-8和useBodyEncodingForURI设置为true(为true的话就会使用请求头里面的ContentType设置的编码字符集)

2.HTTP Header

对Header进行解码是调用request.getHeader时进行的,我们无法设置Header的其他解码方式,它默认是ISO的,如果Header里面有非ASCII字符,肯定会乱码。

3.POST表单的编解码

POST表单传输是通HTTP的BODY传递到服务端的,当在页面点击提交按钮时,浏览器先根据ContentType 的Charset对表单的参数进行编码,然后提交到服务端,服务端第一次调用request.getParamenter来解码的,我们可以通过requset.setCharacterEncoding(charset)进行设置。不过需要注意的是这个方法要用在request.getParamenter之前,Tomcat在解析Parameter参数集合时会先获取Header的content-type,但是默认情况下,浏览器在提交from表单时,content-type没有charset信息。如果没有进行设置,那么表单提交的数据将会根据系统默认的编码。

4.HTTP BODY的编解码

在服务器通过Response返回数据给浏览器,要先通过response.setCharacterEncoding来设置,它会通过Header的Content-Type返回给客户端,浏览器接收到返回的Socket流时通过Content-Type的charset来解码,如果没有设置Content-Type的charset,那么浏览器将会根据HTML的里面的charset进行解码,没有定义的话就默认

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值