servlet浏览器服务器传输数据出现乱码

        web应用浏览器与服务器交互(数据传输)是不可避免的,在开发过程中会发现服务器在对浏览器发送过来的数据进行解析时出现乱码现象,尤其传输的数据中含有中文时的乱码现象。主要原因有二:一是浏览器和服务器的编解码方式不含有中文编码所致。默认情况下浏览器与服务器的编码与解码方式为“iso-8859-1”,由于“iso-8859-1”编码不含有中文编码(也就是不认识中文),因此会出现乱码现象(见中文便改为?),解决此类问题主要通过设置浏览器与服务器的编码方式支持中文编码即可。使用最多的含有中文编码的方式为“utf-8”(也可以用GBK),因此我们使用该编码方式来对数据进行编解码。

        浏览器端(也就是html页面)在<head>标签内加入<meta charset="utf-8"/>标签来指定页面的编码方式,即:

<head>
    <meta charset="utf-8" />
</head>

        服务器端解码有三种方法:

        第一种方法:先获得传输数据的字节码数组,然后再对字节码数组按照“utf-8”方式进行编码,代码如下:

String name = request.getParameter("name");//根据属性名获取浏览器发送的数据
byte[] data = name.getBytes();  //得到数据的byte数组
name = new String(data,"utf-8");  //对byte数组根据"utf-8"进行编码并覆盖原内容

        该方法对get和post请求均有效,但是需要对浏览器传送的数据逐个进行解码、编码,过程繁琐,实际应用中并不常见。

        第二种方法:改变tomcat的配置文件server.xml,在65行加入URIEncoding="utf-8"。该方法对tomcat下所有项目有效,但是由于是设置请求路径的编码方式,因此仅支持get请求(get请求的数据在请求路径中)。

        第三种方法:在获取浏览器发送的数据前加入下列一行代码

request.setCharacterEncoding("utf-8");

        该方法仅支持post请求。


服务器向浏览器发送数据设置编码方式就比较简单了,一行代码搞定(需要写在服务器向浏览器发送数据前):

response.setContextType("text/html; charset=utf-8");


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值