文档章节

JavaEE细节问题03——关于服务器和浏览器的编码解码

Lunqi
 Lunqi
发布于 2015/08/15 00:09
字数 663
阅读 203
收藏 13

Request——对于接受请求:

 获取请求中的编码解码问题 :

                对于post请求,浏览器会根据当前页面的编码来对字符进行编码

                所以我们 直接采用:

 request.setCharacterEncoding("UTF-8");

 对于get请求,浏览器自动对字符进行iso-8859-1编码

 所以我们拿到以后就要对其进行iso-8859-1解码,使其成为原本的字节数组,然后再进行utf-8编码 

        Enumeration<String> enums = request.getParameterNames();
        while (enums.hasMoreElements()) {
            String name = enums.nextElement();
            String value = request.getParameter(name);
            value = new String(value.getBytes("ISO-8859-1"),"utf-8");
            System.out.println(name+":"+value);
        }

注意:浏览器会根据设置的编码来对url中非保留字符进行encode,在mac osx上,对于中文的url参数会根据utf-8编码将中文进行encodeURI(这里感谢@双城记 对我的指正

Response——对于发出响应:

    直接使用字节流不指定编码的话,服务器会默认使用系统编码进行编码,浏览器也会使用系统默认编码进行解码

public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    OutputStream os = response.getOutputStream();
    os.write("我是好人".getBytes());//不指定编码的话将使用系统默认编码
}

=====浏览器正常显示====

使用字节流指定编码,并指定Http协议的相应信息,告诉浏览器用什么编码解析字节流

public void doPost(HttpServletRequest request, HttpServletResponse response)
    OutputStream os = response.getOutputStream();
    // os.write("我是好人".getBytes());//不指定编码的话将使用系统默认编码
    os.write("我也是好人".getBytes("utf-8"));//指定编码,指定编码之后一点要在响应头中指定浏览器解析的编码
    //response.setHeader("Content-Type", "text/html;charset=utf-8");
    response.setContentType("text/html;charset=utf-8");
    //上述两种都可以
}

        使用字符流不指定编码的话,服务器会默认使用ISO-8859-1进行编码

所以如果使用字符流传输汉字,一定要设置编码

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
    //response.getWriter().write("我是好人");// 不行的,因为默认ISO-8859-1编码
    response.setCharacterEncoding("utf-8");//设置成utf-8编码
    response.setHeader("Content-Type", "text/html;charset=utf-8");
    response.getWriter().write("我是好人");
}

然后setContentType("text/html;charset=编码")setCharacterEncoding和setHeader("Content-Type", "text/html;charset=编码")的效果

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
    //response.getWriter().write("我是好人");// 不行的,因为默认ISO-8859-1编码
            /*
            response.setCharacterEncoding("utf-8");//设置成utf-8编码
            response.setHeader("Content-Type", "text/html;charset=utf-8");
            */
    response.setContentType("text/html;charset=utf-8");//这一句可以达到上面两句的效果
    response.getWriter().write("我是好人");
}



© 著作权归作者所有

共有 人打赏支持
Lunqi

Lunqi

粉丝 41
博文 35
码字总数 29786
作品 1
杭州
程序员
私信 提问
加载中

评论(7)

CanyellWang
CanyellWang

引用来自“双城记”的评论

文章有严重错误
“对于get请求,浏览器自动对字符进行iso-8859-1编码”

浏览器会根据设置的编码来对url中非保留字符进行encode,在mac osx上,对于中文的url参数会根据utf-8编码将中文进行encodeURI。传到服务器上以后可能会以iso-8859-1形式进行解码导致应用读取编码错误。出现这样的情况一般是因为tomcat中设置的问题。把server.XML里边的编码设置成utf-8就可以了。

引用来自“CanyellWang”的评论

你好,tomcat-6.0.18的server.XML中没有编码配置,在windows上是默认的的iso-8859-1吗? 需不需要写上URIEncoding="UTF-8" 呢?还是就让它默认,以后自己处理。 如果改成UTF-8,实际开发中会碰到什么问题吗?

引用来自“双城记”的评论

一般项目都统一使用UTF-8编码,tomcat 6的编码设置应该和7、8类似,如果不改编码,会有乱码问题。改了才不会有问题。
谢谢!
CanyellWang
CanyellWang

引用来自“双城记”的评论

文章有严重错误
“对于get请求,浏览器自动对字符进行iso-8859-1编码”

浏览器会根据设置的编码来对url中非保留字符进行encode,在mac osx上,对于中文的url参数会根据utf-8编码将中文进行encodeURI。传到服务器上以后可能会以iso-8859-1形式进行解码导致应用读取编码错误。出现这样的情况一般是因为tomcat中设置的问题。把server.XML里边的编码设置成utf-8就可以了。

引用来自“CanyellWang”的评论

你好,tomcat-6.0.18的server.XML中没有编码配置,在windows上是默认的的iso-8859-1吗? 需不需要写上URIEncoding="UTF-8" 呢?还是就让它默认,以后自己处理。 如果改成UTF-8,实际开发中会碰到什么问题吗?

引用来自“Lunqi”的评论

早点睡。。。
。。。。好的
双城记
双城记

引用来自“双城记”的评论

文章有严重错误
“对于get请求,浏览器自动对字符进行iso-8859-1编码”

浏览器会根据设置的编码来对url中非保留字符进行encode,在mac osx上,对于中文的url参数会根据utf-8编码将中文进行encodeURI。传到服务器上以后可能会以iso-8859-1形式进行解码导致应用读取编码错误。出现这样的情况一般是因为tomcat中设置的问题。把server.XML里边的编码设置成utf-8就可以了。

引用来自“CanyellWang”的评论

你好,tomcat-6.0.18的server.XML中没有编码配置,在windows上是默认的的iso-8859-1吗? 需不需要写上URIEncoding="UTF-8" 呢?还是就让它默认,以后自己处理。 如果改成UTF-8,实际开发中会碰到什么问题吗?
一般项目都统一使用UTF-8编码,tomcat 6的编码设置应该和7、8类似,如果不改编码,会有乱码问题。改了才不会有问题。
Lunqi
Lunqi

引用来自“双城记”的评论

文章有严重错误
“对于get请求,浏览器自动对字符进行iso-8859-1编码”

浏览器会根据设置的编码来对url中非保留字符进行encode,在mac osx上,对于中文的url参数会根据utf-8编码将中文进行encodeURI。传到服务器上以后可能会以iso-8859-1形式进行解码导致应用读取编码错误。出现这样的情况一般是因为tomcat中设置的问题。把server.XML里边的编码设置成utf-8就可以了。

引用来自“CanyellWang”的评论

你好,tomcat-6.0.18的server.XML中没有编码配置,在windows上是默认的的iso-8859-1吗? 需不需要写上URIEncoding="UTF-8" 呢?还是就让它默认,以后自己处理。 如果改成UTF-8,实际开发中会碰到什么问题吗?
早点睡。。。
CanyellWang
CanyellWang

引用来自“双城记”的评论

文章有严重错误
“对于get请求,浏览器自动对字符进行iso-8859-1编码”

浏览器会根据设置的编码来对url中非保留字符进行encode,在mac osx上,对于中文的url参数会根据utf-8编码将中文进行encodeURI。传到服务器上以后可能会以iso-8859-1形式进行解码导致应用读取编码错误。出现这样的情况一般是因为tomcat中设置的问题。把server.XML里边的编码设置成utf-8就可以了。
你好,tomcat-6.0.18的server.XML中没有编码配置,在windows上是默认的的iso-8859-1吗? 需不需要写上URIEncoding="UTF-8" 呢?还是就让它默认,以后自己处理。 如果改成UTF-8,实际开发中会碰到什么问题吗?
Lunqi
Lunqi

引用来自“双城记”的评论

文章有严重错误
“对于get请求,浏览器自动对字符进行iso-8859-1编码”

浏览器会根据设置的编码来对url中非保留字符进行encode,在mac osx上,对于中文的url参数会根据utf-8编码将中文进行encodeURI。传到服务器上以后可能会以iso-8859-1形式进行解码导致应用读取编码错误。出现这样的情况一般是因为tomcat中设置的问题。把server.XML里边的编码设置成utf-8就可以了。

受教了,之前了解的不够细致,马上改回来,谢谢您的指正和帮助
双城记
双城记
文章有严重错误
“对于get请求,浏览器自动对字符进行iso-8859-1编码”

浏览器会根据设置的编码来对url中非保留字符进行encode,在mac osx上,对于中文的url参数会根据utf-8编码将中文进行encodeURI。传到服务器上以后可能会以iso-8859-1形式进行解码导致应用读取编码错误。出现这样的情况一般是因为tomcat中设置的问题。把server.XML里边的编码设置成utf-8就可以了。
[转]编码

在JSP/Servlet 中主要有以下几个地方可以设置编码,pageEncoding="UTF-8"、contentType="text/html;charset=UTF -8"、request.setCharacterEncoding("UTF-8")和response.setCharacterEncodi......

inferrrrrr
2010/05/11
159
0
解决Servlet从前台接值时乱码的方法

用GET方式提交(经测,POST也可以,原因很简单): String name = request.getParameter("name");name = new String(name.getBytes("ISO-8859-1"),"UTF-8"); 用POST方式提交: request.setC......

flying-tomato
2015/06/30
0
0
Servlet简介与Servlet和HttpServlet运行的流程

1.Servlet [1] Servlet简介 > Server + let > 意为:运行在服务器端的小程序。 > Servlet实际上就是一个接口。 - 狭义上的Servlet,指的就是Servlet接口 - 广义上的我们认为凡是实现Servlet...

architect刘源源
09/09
0
0
Java Web 编码问题二:Servlet响应头的的设置

通过Java Web 编码问题一:jsp的编码,我们知道我们只需要在文件中设置好编码,就基本没有问题了。但是我们们之间使用Servlet的呢? 下面是一个简单的测试Servlet,如果保存UserInfo.saveUs...

trayvon
2015/11/02
0
0
Java Web 编码问题一:jsp的编码问题

首先我们来看一张由eclipse生成的jsp文件的头: 图1:JSP文件编码 如上图所示jsp中的三个编码, ①代表的是服务器响应客户端请求的编码方式。服务器会用它来设置http响应头的content-type。就...

trayvon
2015/11/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

《大漠烟尘》读书笔记及读后感文章3700字

《大漠烟尘》读书笔记及读后感文章3700字: 在这个浮躁的社会里,你有多久没有好好读完一本书了? 我们总觉得自己和别人不一样,所以当看到别人身上的问题时,很少有“反求诸己”,反思自己。...

原创小博客
22分钟前
1
0
大数据教程(9.5)用MR实现sql中的jion逻辑

上一篇博客讲解了使用jar -jar的方式来运行提交MR程序,以及通过修改YarnRunner的源码来实现MR的windows开发环境提交到集群的方式。本篇博主将分享sql中常见的join操作。 一、需求 订单数据表...

em_aaron
30分钟前
1
0
十万个为什么之什么是resultful规范

起源 越来越多的人开始意识到,网站即软件,而且是一种新型的软件。这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency)、高并发等特点...

尾生
36分钟前
1
0
Terraform配置文件(Terraform configuration)

Terraform配置文件 翻译自Terraform Configuration Terraform用文本文件来描述设备、设置变量。这些文件被称为Terraform配置文件,以.tf结尾。这一部分将讲述Terraform配置文件的加载与格式。...

buddie
59分钟前
2
0
exportfs命令, vsftp搭建ftp服务

exportfs命令 当修改/etc/exports文件后,更改的内容是不会立即生效的。如果重启nfs服务,会导致客户端重启期间的请求是挂起等待的,可以把客户端的挂载umount进行卸载后,再重启nfs服务,但...

野雪球
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部