文档章节

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

Lunqi
 Lunqi
发布于 2015/08/15 00:09
字数 663
阅读 201
收藏 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

粉丝 40
博文 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 中编码格式的设置问题

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

娲城小将
2014/08/21
0
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
(JavaEE-05)Response与Request

如何才算掌握Servlet ServletConfig ServletContext Request Response Cookie Session 上面这些对象(当然不止这些,剩下的对象查阅ServletAPI,不是JavaEEAPI)都是web服务器在条用Servlet...

_-Leon-_
2014/06/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

day96-20180923-英语流利阅读-待学习

英国王子也不看好人工智能,理由却和霍金不同 Daniel 2018-09-23 1.今日导读 2016 年 3 月 9 日至 15 日,世界围棋冠军李世石与谷歌研发的计算机围棋程序 AlphaGo 进行人机大战并以 1 比 4 ...

飞鱼说编程
11分钟前
0
0
今天在码云遇到一个很有意思的人 for Per.js

今天在码云遇到一个很有意思的人,他在我的Per.js项目下面评论了一句,大意为“你试试这句代码,看看速度到底是你快还是Vue快”【当然,这个评论被我手残不小心删掉了...】。 然后我就试了,...

Skyogo
16分钟前
16
0
Java -------- 首字母相关排序总结

Java 字符串数组首字母排序 字符串数组按首字母排序:(区分大小写) String[] strings = new String[]{"ba","aa","CC","Ba","DD","ee","dd"}; Arrays.sort(strings); for (int i ...

切切歆语
18分钟前
0
0
还在用 Git 的 -f 参数强推仓库,你这是在作死!

最近,美国一个程序员因为同事不写注释,代码不规范,最严重的是天天使用 git push -f 参数强行覆盖仓库,该程序员忍无可忍向四名同事开抢,其中一人情况危急!!! 不写注释、代码不规范是一...

红薯
31分钟前
281
0
NPM报错终极大法

所有的错误基本上都跟node的版本相关 直接删除系统中的node 重新安装 sudo rm -rf /usr/local/{bin/{node,npm},lib/node_modules/npm,lib/node,share/man/*/node.*} 重新安装 $ n lts$ npm...

lilugirl
35分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部