http请求中的中文乱码问题
通过浏览器访问服务器页面和资源时,不可避免地要传送中文字串,如果客户机与服务器不能用同一码表解析字串,肯定会出现各种各样的乱码问题。我总结了几个乱码场景及解决办法,如下
1、服务器上的中文字串被客户端访问时出现的乱码问题
原因:浏览器在解析中文时,不知道该用什么码表去解析,就会用默认的gb2312去解析,肯定会出现乱码
解决办法:以什么码表写入流,在响应的请求头里就告诉浏览器用什么码表,例子使用utf-8
//告诉浏览器使用UTF-8码表解析
response.setHeader("Content-type","text/html;charset=UTF-8");//如果写成text/html,charset=UTF-8就会变成了下载,一定要小心
String data="我是谁“;
OutputStream out = response.getOutputStream();
out.write(data.getBytes("UTF-8)); //以UTF-8写入输出流
//告诉浏览器使用UTF-8码表解析
response.setHeader("content-type","text/html;charset=UTF-8");
//告诉response以什么码表向浏览器写出数据
response.setCharacterEncoding("UTF-8");
String data="我是谁“;
OutputStream out = response.getOutputStream();
out.write(data);
上面两种方法的效果是一样的,除了上面两种写法,还有一种更简单的写法,效果同上。
//告诉浏览器使用UTF-8码表解析
//告诉response以什么码表向浏览器写出数据
response.setContentType("text/html;charset=UTF-8");
String data="我是谁“;
OutputStream out = response.getOutputStream();
out.write(data);
最后一种写法原理与上面三种不一样,这是在html文档里通过meta标签告诉浏览器使用什么码表
//告诉浏览器使用UTF-8码表解析
String data="我是谁“;
OutputStream out = response.getOutputStream();
out.write("<meta http-equiv='content-type' content='text/html;charset=UTF-8'>".getBytes());
out.write(data.getBytes("UTF-8)); //以UTF-8写入输出流
2、客户端提交中文到服务端导致的乱码
原因:客户端以UTF-8编码,服务端中的request以默认的Iso8859码表解析
解决办法:告诉request用UTF-8码表解析
下面我们看看如果告诉request,由于get请求与post请求传参方式不一样,因此在这分开举例
post请求解决方式
request.setCharacterEncoding("UTF-8");
String para = request.getParameter("username");
get请求解决方式
String name= request.getParameter("username");
//以原来的编码解析再以UTF-8编码
name = new String(name.getBytes("iso8859-1"),"UTF-8");
注意:post请求处理方式对get请求无效,是因为在get请求中参数是在url路径中出现
不过可以通过修改server.xml文件中配置编post请求处理方式适用于get请求,配置文件修改如下:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
useBodyEncodingForURI="true"/> //让URI编码方式与servlet中request的编码方式一致
http请求中的中文乱码问题的更多相关文章
- 解决URL请求中的中文乱码问题
解决URL提交中文出现乱码有两种办法:1.请求端的中字符有encodeURI进行一次转码,如: var url="/getUser?name="+encodeURI(name);服 ...
- Java Web 开发中的中文乱码与解决方式
乱码产生的原因 不管是request乱码还是response乱码,其实都是由于客户端(浏览器)跟服务器端采用的编码格式不一致造成的.以request乱码为例:浏览器向服务器发送请求,因为浏览器与服务器 ...
- Tomcat 中get请求中含有中文字符时乱码的处理
Tomcat 中get请求中含有中文字符时乱码的处理
- Servlet处理get请求时的中文乱码问题
我们都知道,使用Servlet处理get请求时,如果get请求的参数中有中文,直接接收会是乱码,这个时候我们使用类似下面的语句来处理乱码: 12345 String name = request.ge ...
- action接收到来自jsp页面的请求时出现中文乱码问题处理方法
写JSP程序时,在Servlet中取请求参数时出现了乱码,当然,这种乱码问题再简单不过了.由于在JSP中使用了GBK作用页面的编码,那么提交的中文信息自然也会被按着GBK进行编码,为%xx格式的GBK ...
- 如何解决http请求返回结果中文乱码
如何解决http请求返回结果中文乱码 1.问题描述 http请求中,请求的结果集中包含中文,最终以乱码展示. 2.问题的本质 乱码的本质是服务端返回的字符集编码与客户端的编码方式不一致. 场景的如服务 ...
- 解决URL地址中的中文乱码问题的办法
解决URL地址中的中文乱码问题的办法 引言: 在Restful类的服务设计中,经常会碰到需要在URL地址中使用中文作为的参数的情况,这种情况下,一般都需要正确的设置和编码中文字符信息.乱码问题就此产生 ...
- ajax请求controller出现中文乱码
ajax请求controller出现中文乱码 解决方法:在 @RequestMapping 中加上 produces = {"application/json;charset=UTF-8& ...
- MAC下 mysql不能插入中文和中文乱码的问题总结
MAC下 mysql不能插入中文和中文乱码的问题总结 前言 本文中所提到的问题解决方案,都是基于mac环境下的,但其他环境,比如windows应该也适用. 问题描述 本文解决下边两个问题: 往mysq ...
随机推荐
- 【刷题】洛谷 P4319 变化的道路
题目描述 小 w 和小 c 在 H 国,近年来,随着 H 国的发展,H 国的道路也在不断变化着 根据 H 国的道路法,H 国道路都有一个值 \(w\) ,表示如果小 w 和小 c 通过这条道路,那么他 ...
- 【刷题】BZOJ 2157 旅游
Description Ray 乐忠于旅游,这次他来到了T 城.T 城是一个水上城市,一共有 N 个景点,有些景点之间会用一座桥连接.为了方便游客到达每个景点但又为了节约成本,T 城的任意两个景点之间 ...
- 洛谷 P2473 [SCOI2008]奖励关 解题报告
P2473 [SCOI2008]奖励关 题目描述 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出\(k\)次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝 ...
- 图像处理之色彩转换(CCM)
1 色彩校正原理 人眼对色彩的识别,是基于人眼对光谱存在三种不同的感应单元,不同的感应单元对不同波段的光有不同的响应曲线的原理,通过大脑的合成得到色彩的感知. 一般来说,我们可以通俗的用 RGB三基 ...
- C陷阱与缺陷的个人知识点摘录
编译过程的一点心得体会: .h文件其实只在预处理的过程用到,用来将类似#include <stdio.h>这样的行展开为具体内容. 那些标准库或者其他库中的函数,是在链接的过程中连接器把相 ...
- UVAL 7902 2016ECfinal F - Mr. Panda and Fantastic Beasts
题意: 给出n个串,求一个最短的第一个串的子串使它不在其他的n-1个串中出现,若有多个求字典序最小的. Limits: • 1 ≤ T ≤ 42. • 2 ≤ N ≤ 50000. • N ≤ S1 ...
- FastDFS部署
环境: CentOS 7 FastDFS 5.05 Nginx 1.10 fastdfs-nginx-module_v1.16 libfastcommon-1.0.7 libevent-2.0.21- ...
- java.lang.AutoCloseable
java.lang.AutoCloseable和java.io.Closeable public interface AutoCloseable { void close() throws Excep ...
- 转:iOS-CoreLocation:无论你在哪里,我都要找到你!
1.定位 使用步骤: 创建CLLocationManager示例,并且需要强引用它 设置CLLocationManager的代理,监听并获取所更新的位置 启动位置更新 1 2 3 _manager = ...
- NDKr10的各种BUG
NDKr10有几个BUG,所以推荐使用NDKr9 bug1:不支持srand() bug2: 链接异常,找不到stpcpy()