gb2312 utf-8

 response.getOutputStream().write("你好呀我是中国".getBytes());//显示正常

“你好呀我是中国”.getBytes()这句代码在转成byte[]数组的时候默认查的是gb2312编码,而"你好呀我是中国"支持gb2312编码,所以可以正常显示出来。
如果charset=gb2312 ,即告诉浏览器网页的编码格式为gb2312

但是,程序要实现通用性,应该使用的是UTF-8编码,我们在字符串转换成字节数组时指定UTF-8编码

response.getOutputStream().write("你好呀我是中国".getBytes("UTF-8"));//显示乱码

为什么它变成了乱码呢?原因是这样的:我在向服务器输出的中文是UTF-8编码的,而浏览器采用的是GBK,GBK想显示UTF-8的中文数据,不乱码才怪呢!
那么就要去给浏览器右键选择编码为UTF-8格式,这样乱码问题又解决了。
可是,每次编写UTF-8程序时都要去网页上改编码格式吗?这样明显不可能的。
既然HTTP响应有对浏览器说明回送数据是什么类型的消息头,那么HttpServletResponse对象就应该有相对应的方法告诉浏览器回送的数据编码格式是什么
于是乎就去查找Servlet API,找到了设置消息头的方法

    //设置头信息,告诉浏览器我回送的数据编码是utf-8的
    response.setHeader("Content-Type", "text/html;charset=UTF-8");
    
    response.getOutputStream().write("你好呀我是中国".getBytes("UTF-8"));

浏览器在显示数据时,自动把页面的编码格式置换成UTF-8,乱码问题也解决了

由于Tomcat是外国人的写,Tomcat默认的编码是ISO 8859-1,当我们输出中文数据的时候,Tomcat会依据ISO 8859-1码表给我们的数据编码,中文不支持这个码表呀,所以出现了乱码
既然如此,我设置一下编码不就好了吗,代码如下:

    //原本是ISO 8859-1的编码,我设置成UTF-8
    response.setCharacterEncoding("UTF-8");

当没有指定request的编码方式时,从客户端得到的数据是ISO-8859-1编码的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值