`
aawty
  • 浏览: 30726 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

从tomcat乱码问题中学习Java编码

阅读更多

    项目在jetty中运行正常,打包到tomcat中,发现项目有的页面出现乱码。好像之前部署的时候也出现过这个BUG,但是当时不是这个项目,也不是我解决的。刚好趁这次回顾一下以前学习的编码知识。

    关于为什么要编码:计算机中存储信息的最小单元是一个字节,8bit(0~255),人类要表示的符号太多,无法用一个字节完全表示,则有一个新的数据结构Char到byte的编码。

    JAVA中经常遇到几种编码格式的区别:ASCII,ISO-8895-1,GB2312,GBK,UTF-8,UTF-16看作字典,规定了转换规则。

    Java中需要编码的场景:1.I/O操作中存在编码(磁盘和网络I/O),InputStreamReader类是关联字节到字符的桥梁,负责I/O过程中字节到字符的转换,具体转换委托给StreamDecoder解码,其中由用户指定编码格式;2.内存操作中的编码。

    Java中需要编码的数据:用户从浏览器发起一个HTTP请求,存在编码的地方是URL,Cookie,Parameter.服务器端要解析HTTP协议,其中URI.COOKIE.POST表单参数要解码,服务器端可能要读取数据库中的数据——本地或网络中其他地方的文本文件,都存在编码问题。

    通常可以将常见的乱码问题分为JSP页面显示中文乱码、表单提交乱码两类。

    JSP页面中显示中文乱码:在JSP文件中使用page命令指定响应结果的MIME类型,如<%@ page language="java" contentType="text/html;charset=gb2312" %>

    表单提交乱码: 主要是因为服务器处理编码的方式和页面提交方式(post和get)不同。以tomcat为例,tomcat处理提交的参数时默认的是iso-8859-1,使用request.getParameter方法会得到乱码。换句话说:tomcat默认将单字节作为一个字符,但是中文是2个或者3个字节表示一个字符。

    tomcat遇到的常见问题解决方式。

    对于post方式:解决办法是编写一个过滤器统一处理post请求,过滤器在用户提交的数据被处理之前被调用

    对于get方式:这是我所遇到的情况。tomcat对post和get的处理方法不一样,所以过滤器不能解决get的乱码问题,它需要在其他地方设置。解决方法是打开<tomcat_home>\conf目录下server.xml文件,找到对8080端口进行服务的Connector组件的设置部分,给这个组件添加一个属性:URIEncoding="UTF-8"。注意修改后重新启动tomcat才能起作用。

    为什么get方式要这样处理?因为客户端发送过来的请求,tomcat对url编码会判断server.xml中没有设置URIEncoding,如果有设置,则用设置的编码方式,否则用tomcat默认的即iso-8859-1(iso-8859-1)。我遇到的也是因为get中参数提交的时候出现以上情况。

 

参考:深入分析java web技术内幕   第3章 深入分析Java Web中的中文编码问题
          http://nileader.blog.51cto.com/1381108/384353

          http://zhuzhsh.iteye.com/blog/251743

     

   

分享到:
评论

相关推荐

    apache-tomcat-8.0.33中文自动解决GBK乱码问题

    apache-tomcat-8.0.33,针对有些项目的前端页面中,又有UTF-8,又有GBK,但是开发工具只配置了一种编码,导致其他页面出现部分乱码,并且更改该文件的编码也无效。而该工具可以自动解决UTF-8和GBK乱码的问题。 使用...

    Java乱码问题解决

    造成这种问题的根本原因是Java中默认的编码方式是Unicode,而中国人通常使用的文件和DB都是基于GB2312或BIG5等编码,故会出现此问题。 对于不同的问题,不同的JDK版本,不同的应用服务器(如Tomcat,Jboss,...

    Struts+Hibernate+MyEclipse+Tomcat+MySQL的乱码之解决篇

    Struts Hibernate MyEclipse Tomcat MySQL JSP 乱码 编码出错 内码设定

    java中MySQL中文乱码问题解决方案

    主要是数据库方面的编码修改,jsp还有tomcat中的修改很简单,这里不做赘述了。

    解决idea工具tomcat控制台乱码问题

    第一步:设置idea中Tomact的编码格式 1.打开 Edit tomcat configuration–&gt; VM options 后面输入: -Dfile.encoding=utf-8 第二步:设置idea的编码格式 idea 安装目录下/bin/idea.exe.vmoptions 和/bin/idea64.exe....

    IDEA中Tomcat乱码问题

    首先修改IDEA中的编码方式 修改tomcat目录下conf 配置目录下的 logging.properties文件 java.util.logging.ConsoleHandler.encoding = GBK  结果: 但是 这两个地方都还是乱码,如果接受不了请看第二种方法 第...

    html 中文乱码 HTML超链接中文乱码问题分析及解决方法

    如果直接拼接,传到后台Action的参数对象中后取出会是乱码,需要编码后再拼接到URL上。 解决方法是在Action中添加一个成员变量,保存编码后的中文参数。在vm页面渲染时取出这个变量值,再拼接超链接。 在这里碰到的...

    Java_EE中文乱码问题解决方案.ppt

    Java_EE中文乱码问题解决方案:如果你是从事java web开发,中文乱码是不是经常遇到,这里有详细的配置如果从MyEclipse(Eclipse),TOmcat中修改代码的格式,从而达到总体的编码一致,杜绝乱码

    彻底解决fckeditor(jsp版)上传中文图片乱码问题

    彻底解决fckeditor(jsp版)上传中文图片乱码问题,我这里用的编码是utf-8的,这里用的fckeditor 是2.6的,fckeditor.java包是2.3的,经过我修改ConnectorServlet.java和SimpleUploaderServlet.java两个文件,重新生成...

    SmartUpload 用于JDK1.5(中文终极解决版,包括中文文件名上传后乱码,中文参数,下载)

    下载后,放到tomcat等服务器的lib目录中即可,也可以改名为jspsmartupload.jar(或任意名字) 使用说明: 默认编码为UTF-8,若您的系统是其他编码的,请选用我的指定编码函数: 1.上传默认方法upload(),指定编码...

    SmartUpload 用于JDK1.4(中文终极解决版,包括中文文件名上传后乱码,中文参数,下载)

    下载后,放到tomcat等服务器的lib目录中即可,也可以改名为jspsmartupload.jar(或任意名字) 使用说明: 默认编码为UTF-8,若您的系统是其他编码的,请选用我的指定编码函数: 1.上传默认方法upload(),指定编码...

    SmartUpload 上传组件(中文终极解决版,包括中文文件名上传后乱码,中文参数,下载),JDK 1.6

    下载后,放到tomcat等服务器的lib目录中即可,也可以改名为jspsmartupload.jar(或任意名字) 使用说明: 默认编码为UTF-8,若您的系统是其他编码的,请选用我的指定编码函数: 1.上传默认方法upload(),指定编码...

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    《Java Web编程宝典(十年典藏版)》是一本集技能、范例、项目和应用为一体的学习手册,书中介绍了应用Java Web进行程序开发的各种技术、技巧。全书分4篇,共24章,其中,第1篇为技能学习篇,主要包括Java Web开发环境...

    修改Tomcat运行时jvm编码问题

    最近在部署项目的时候出现数据乱码的情况,经过一番查看项目都是用的UTF-8编码格式,数据也是,但是经过调用接口传给对方就乱码了。 由于是部署在Windows环境下,Windows默认编码GBK,这就导致了jvm运行时编码不一致...

    Struts+Hibernate+MyEclipse+Tomcat+MySQL的乱码之解决

    显示界面,JSP 2.0 JAVA容器:Tomcat 5.X MVC构架:Struts 1.2 ORM工具:Hibernate 3 数据库:MySQL 5.0 编译IDE:MyEclipse 5.0

    BBS论坛管理(Java EE项目案例)

    如果上面5步都没问题,你就不存在中文乱码问题。 ============================== 数据库使用的是MySQL,其版本为5.0.45 版本。 数据库的用户名及密码均为root。 使用的时候,请参考附件数据库导入一节。或将需要...

    quercus,java 里边运行php程序

    jvm 里边运行php程序的包,解决了中文乱码问题. 注意使用UTF-8编码保存页面格式.resin下替换原版就可以了.其它jsp服务器比如tomcat,要script-10.jar 可以拷贝resin3.x里边的包.使用方法看resin帮助.

    解决idea开发遇到javascript动态添加html元素时中文乱码的问题

    一个几个月前做的小网站,这两天翻出来再看看,发现JavaScript文件中动态添加html元素中的中文乱码了,但是从后台获取的动态中文资源没问题,只有js文件中的静态中文资源,加载到网页中显示乱码 不要在意日期中年...

    jsp传参 servlet接收中文乱码问题的解决方法

    一直都是做android和h5的,但是发现做程序连一点服务都不会该怎么办,所以最近开始学起了java,不知道是不是因为框架学多了,现在看起springmvc框架比以前看起来简单太多了,这里我是准备从hibernate开始学习,...

    公告管理系统(Java EE项目案例)

    如果上面5步都没问题,你就不存在中文乱码问题。 ============================== 数据库使用的是MySQL,其版本为5.0.45 版本。 数据库的用户名及密码均为root。 使用的时候,请参考附件数据库导入一节。或将需要...

Global site tag (gtag.js) - Google Analytics