前端后端数据交换乱码问题 您所在的位置:网站首页 response返回文件流没有内容 前端后端数据交换乱码问题

前端后端数据交换乱码问题

2023-06-26 17:02| 来源: 网络整理| 查看: 265

请求乱码

浏览器发送请求时使用的是什么编码呢? 浏览器打开表单页面时使用的什么编码就会用什么编码发送数据,我们可以通过设置打开表单页面的编码来控制页面发送数据时的编码。假设表单页面是utf-8,则这个页面发送请求参数用的也是utf-8。

而服务器是用什么编码解析的呢? 以tomcat6为例,服务器默认用iso8859-1来解码,用utf-8编码,这就产生了乱码,因utf-8中是3个字节一个汉字,iso8859-1中是个字节一个字符,如“北京”为两个汉字,在utf-8中共六个字节,而iso8859-1按一个字节一个字符处理,显示出了6个问号。 我们该如何解决这个问题呢? 其实,只要对POST提交做如下设置即可:

request.setCharacterEncoding("utf-8");

但是,这个方法只对请求的实体内容起作用,因GET提交的请求参数在地址栏后,并不在实体内容中,所以这个方法对于GET提交无效。

那么,该如何处理GET提交的乱码呢?

服务器用iso8859-1来解析,造成了乱码,由于iso8859-1无法正确显示这些字符,所以显示为了“?”,但是底层的编码仍然是正确的。所以,我们可以通过如下方式解决: 如果参数是country:

String country = new String(req.getParameter("country").getBytes("iso-8859-1"), "utf-8");

响应乱码 服务器发送数据到浏览器,有字符和字节两种方式,这两种方式产生乱码的原理各不相同。

字节方式输出数据:response.getOutputStream( ).write("中国".getBytes("utf-8")); 乱码问题,大部分都是由于编码和解码码表不同产生的,服务器在发送中文数据时,使用的是UTF-8码表,那么浏览器是用什么码表解析的呢?IE浏览器在没有特别指定码表时,将使用所在操作系统的默认码表,utf-8的数据发送给浏览器后,浏览器用gbk2312打开自然就出现了乱码问题。 那么如何解决这种乱码呢? 在HTTP协议中提供了Content-Type响应头,我们可以通过这个头通知浏览器发送的数据是什么格式,如果是文本数据还可以通过charset属性通知浏览器用什么编码打开,因此我们只要做如下设置即可解决乱码: response.setContentType("text/html;charset=utf-8"); 字符方式输出数据:response.getWriter().write(“中国”) 服务器会在发送数据时将字符转换为字节后发送,那么服务 器使用的是什么编码集呢?以tomcat6为例,其默认编码集是iso8859-1,我们知道iso8859-1中是没有中文字符的,对于没有的字符 iso8859-1将会使用“?”来替代,所以浏览器页面上就显示成了“?” tomcat8以后默认为utf-8 response.setHeader("content-type", "text/html;charset=utf-8"); response.setCharacterEncoding("utf-8"); response.getWriter().write("中国");


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有