前端后端数据交换乱码问题
请求乱码
浏览器发送请求时使用的是什么编码呢?
浏览器打开表单页面时使用的什么编码就会用什么编码发送数据,我们可以通过设置打开表单页面的编码来控制页面发送数据时的编码。假设表单页面是utf-8,则这个页面发送请求参数用的也是utf-8。
<%@ page language="java" import="java.util.*" pageEncoding="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("中国");
前端后端数据交换乱码问题相关推荐
- Ajax 前端后端数据交互
Ajax 前端/后端数据交互 一 概述 同步: 一请求一响应,全局刷新 异步: 多请求多响应,局部刷新 (默认为异步,效率高) 场景: 浏览网页时,未全局刷新,能更新数据的页面基本都使用了 ...
- 电商项目中的SKU设计,前端后端数据逻辑
电商商品中常常能看到 其中,Color, 与Size,就是所谓的商品属性: 1.数据库如何设计 (1)商品表:goods 这个表很简单,根据需求来设计 (2)规格表:goods_attr (3)规格属 ...
- 前端后端数据传递的几种方式
记录一下前端不同形式传递数据,后端的接收的方式 1. form表单 <form action="/api/user/add" method="POST"& ...
- Web前后端数据交换技术和规范发展史:Form、Ajax、Comet、Websocket
第一阶段:Form web应用想要与服务器交互,必须提交一个表单(form).服务器接收并处理该表单,然后返回一个全新的页面. 缺点:前后两个页面需要更新的数据可能很少,这个过程可能传输了很多之前那个 ...
- Android---SpringBoot实现前后端数据交互
Android-SpringBoot实现前后端数据交互 星光不问赶路人,时间不负有心人 这篇是针对android传数据到后台springboot,使用Xutils框架 使用Xutils框架 关于xut ...
- 2020-08-22 SpringMVC中Json使用、后端返回给前端的JSON对象乱码问题、前台对Json数据格式的操作、Jackson以及FastJson使用
json的使用 我们广义上说的后端开发提供接口,其实指的是我们在Controller层定义的域名:端口号/请求名 前端获取这个请求,去赋给比如表单的action,获取相应的结果集并展示. json:轻 ...
- angular.js前端和后台的数据交换,后台取不到值对应方案
2019独角兽企业重金招聘Python工程师标准>>> 环境:angular.js+sastruts+apache-tomcat 最近在学习前端的一个设计工具angular.js,数 ...
- MVC框架中的前端与后端数据传递及实例
一.MVC框架 MVC代表Model.View.Controller,即模型.视图.控制器.其中: View(视图):就是人机交互界面,可以给用户显示业务逻辑数据,同时也可以 接收用户输入的数据. M ...
- 剥开比原看代码09:通过dashboard创建密钥时,前端的数据是如何传到后端的?
2019独角兽企业重金招聘Python工程师标准>>> 作者:freewind 比原项目仓库: Github地址:https://github.com/Bytom/bytom Git ...
最新文章
- 语音信号的短时语音能量
- NYOJ 5287 异 形 卵
- XGBoost对比RandomForest、GBDT、决策树、SVM,XGB+LR精度还能提升
- 【ARTS】01_04_左耳听风-20181203~1209
- flex和js进行参数传递
- java 生成校验验证码_java生成验证码并进行验证
- 写滚动字幕html5源码,[转载]滚动字幕的源代码
- python提取关键词_【Python工具】30万关键词提取疑问词只需2秒,效率高到飞起!...
- STM32移植U8g2图形库——玩转OLED显示
- RestTemplate上传图片到指定接口
- first meet ot MLIR
- 自己是一滩烂泥,却恨铁不成钢
- 【最经典的79个】软件测试面试题(内含答案)都是可以提前准备的!
- kibana篇之数据探索Discover
- ***杂记-2013-07-13
- Partial Transfer Learning with Selective Adversarial Networks学习笔记
- jQuery简单备忘录功能的日历插件
- revit的常用插件出图有哪些?怎么快速局部平面?
- 循环-09. 支票面额(15)
- 微信开发:公众号屏蔽分享功能