文档章节

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

Lunqi
 Lunqi
发布于 2015/08/15 00:09
字数 663
阅读 200
收藏 13
点赞 0
评论 7

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

粉丝 39
博文 31
码字总数 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就可以了。
pom.xml出现web.xml is missing ...解决方案

提示信息应该能看懂。也就是缺少了web.xml文件,<failOnMissingWebXml>被设置成true了。 搜索了一下,Stack Overflow上的答案解决了问题,分享一下。 目前被顶次数最多的回答原文如下: This...

源哥L ⋅ 今天 ⋅ 0

JSP 学习总结---学习笔记

什么是JSP 1)为什么说,Servlet是一个动态Web开发技术呢? Servlet是基于服务端的一种动态交互技术, HttpServletRequest表示客户端到服务端的对象 HttpServletResponse表示服务端到客户端的...

知止内明 ⋅ 04/18 ⋅ 0

Servlet的一些细节--学习笔记

Servlet细节 1)浏览器访问的url-pattern只是一个符合格式的任意字符串,以/开头 2)一个Servlet的url-pattern可以是1个或多个,有二种形式; a).xx b)/xx/ 注意:/不能一起直接使用 3)/和....

知止内明 ⋅ 04/17 ⋅ 0

Java Web(一) Servlet详解!!

一、什么是servlet?     处理请求和发送响应的过程是由一种叫做Servlet的程序来完成的,并且Servlet是为了解决实现动态页面而衍生的东西。理解这个的前提是了解一些http协议的东西,并且...

architect刘源源 ⋅ 05/08 ⋅ 0

java过滤器(Filter和ChainFilter链)你了解吗?(有详细代码)

1、什么是过滤器? 在客户端到服务器的过程中,当发送请求时,如果有不符合的信息将会被filter进行拦截,如果符合则会进行放行,在服务器给客户端响应时也会进行判断 如果有不符合的信息将会...

IT_laobai ⋅ 06/20 ⋅ 0

【J2EE】之常用的接口和协议

前言 初接触J2EE,会遇到很多之前没有遇到过的术语,下面我们来简单地汇总一下这些接口和协议吧。 各大接口和协议详解 JDBC 1.定义:Java数据库连接 2.地位:用于Java应用程序连接数据库的标...

m18633778874 ⋅ 04/26 ⋅ 0

Servlet创建运行的过程--生命周期以及自动加载

前言 初学者像我这样的,刚开始学的时候一脸懵逼,为什么Servlet可以直接运行,明明没有入口啊 只是重写了Servlet中的方法。然后访问该地址怎么就直接运行了。 所以了解Serlvet的运行过程即生...

codingcoge ⋅ 06/12 ⋅ 0

Tomcat,JBoss与JBoss Web

最近接触到应用服务器JBoss,此外JBoss Web与Tomcat也同为web服务器,便查阅资料对三者进行比较,供大家参考。 一、Tomcat Tomcat 服务器是免费开源的Web 应用服务器。支持最新的Servlet 和J...

thinkyoung ⋅ 2014/11/16 ⋅ 0

JavaWeb开发比较重要的面试题

JavaWeb开发比较重要的面试题 1. 编码转换:怎样将GB2312编码的字符串转换为ISO-8859-1编码的字符串? 答:示例代码如下: String s1=”你好”; String s2=new String(s1.getBytes(“GB2312”...

xj_9264 ⋅ 05/06 ⋅ 0

挖洞经验 看我如何发现Paypal内部信息泄露漏洞

        本文我要分享的是,在Paypal网站manager.paypal.com上的某个页面存在“表达式注入“漏洞(Expression Language Injection),利用该漏洞我可以间接获取到Paypal系统的内部IP、...

FreeBuf ⋅ 06/22 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JPA入门,配置文件的设置

<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http......

码农屌丝 ⋅ 19分钟前 ⋅ 0

Java基础——面向对象和构造器

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 静态成员介绍 为什么要有静态成员?静态成员用来...

凯哥学堂 ⋅ 20分钟前 ⋅ 0

vmware中Centos 7 linux的LVM磁盘扩容

系统是RHEL7(centos7差不多一样) 关闭系统,在vmware、设置、硬盘、扩展、输入数字大于当前系统内存、点击扩展。 开机再查看磁盘信息 fdisk -l 注意:可以看出sda磁盘增加了,但是根目录还...

gugudu ⋅ 31分钟前 ⋅ 0

JAVA线程sleep和wait方法区别

昨天面试,突然被问到sleep 和 wait的区别,一下子有点蒙,在这里记一下,以示警戒。 首先说sleep,sleep就是正在执行的线程主动让出cpu,cpu去执行其他线程,在sleep指定的时间过去后,cpu...

徐玉强 ⋅ 33分钟前 ⋅ 0

vuex学习--模块

随着项目复杂性增加,共享状态也越来越多。需要对转态操作进行分组,分组后在进行分组编写。学习一下module:状态管理器的模块组操作。 首先是声明: const moduleA={ state,mutations,g...

大美琴 ⋅ 35分钟前 ⋅ 0

Selenium 简单入门

安装 pip install selenium 驱动下载 https://chromedriver.storage.googleapis.com/index.html 下载最新的驱动,放入path中,可以放入Python的scripts目录下,也可以放入Chrome安装目录,并...

阿豪boy ⋅ 37分钟前 ⋅ 0

292. Nim Game - LeetCode

Question 292. Nim Game Solution 思路:试着列举一下,就能发现一个n只要不是4的倍数,就能赢。 n 是否能赢1 true2 true3 true4 false 不论删除几,对方都能一把赢5 t...

yysue ⋅ 今天 ⋅ 0

6.5 zip压缩工具 6.6 tar打包 6.7 打包并压缩

zip压缩工具 zip命令可以压缩目录和文件,-r 压缩目录。 zip使用方法 zip 1.txt.zip 1.txt //压缩文件 zip -r 123.zip 123/ //压缩目录 unzip 1.txt.zip //解压 unzip 123.zip -d /root/456...

Linux_老吴 ⋅ 今天 ⋅ 0

react-loadable使用跳坑

官方给react-loadable的定义是: A higher order component for loading components with dynamic imports. 动态路由示例 withLoadable.js import React from 'react'import Loadable fro......

pengqinmm ⋅ 今天 ⋅ 0

记录工作中遇到的坑

1、ios safari浏览器向下滚动会触发window resize事件

端木遗风 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部