`
fudehai001
  • 浏览: 490713 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Tomcat中文乱码问题的原理和解决方法

阅读更多
自从接触Java和JSP以来,就不断与Java的中文乱码问题打交道,现在终于得到了彻底的解决,现将我们的解决心得与大家共享。

  一、Java中文问题的由来

  Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦。原因主要有两方面,Java和JSP文件本身编译时产生的乱码问题和Java程序于其他媒介交互产生的乱码问题。

  首先Java(包括JSP)源文件中很可能包含有中文,而Java和JSP源文件的保存方式是基于字节流的,如果Java和JSP编译成class文件过程中,使用的编码方式与源文件的编码不一致,就会出现乱码。基于这种乱码,建议在Java文件中尽量不要写中文(注释部分不参与编译,写中文没关系),如果必须写的话,尽量手动带参数-ecoding GBK或-ecoding gb2312编译;对于JSP,在文件头加上<%@ page contentType="text/html;charset=GBK"%>或<%@ page contentType="text/html;charset=gb2312"%>基本上就能解决这类乱码问题。

  本文要重点讨论的是第二类乱码,即Java程序与其他存储媒介交互时产生的乱码。很多存储媒介,如数据库,文件,流等的存储方式都是基于字节流的,Java程序与这些媒介交互时就会发生字符(char)与字节(byte)之间的转换,例如从页面提交表单中提交的数据在Java程序里显示乱码等情况。

  如果在以上转换过程中使用的编码方式与字节原有的编码不一致,很可能就会出现乱码。

  二、解决方法

  对于流行的Tomcat来说,有以下两种解决方法:

  1) 更改 D:\Tomcat\conf\server.xml,指定浏览器的编码格式为“简体中文”:

  方法是找到 server.xml 中的

    <Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
    enableLookups="false" redirectPort="8443" acceptCount="100"
    connectionTimeout="20000" disableUploadTimeout="true" URIEncoding='GBK' />

  标记,粗体字是我添加的。

  可以这样验证你的更改是否成功:在更改前,在你出现乱码的页面的IE浏览器,点击菜单“查看|编码”,会发现“西欧(ISO)”处于选中状态。而更改后,点击菜单“查看|编码”,会发现“简体中文(GB2312)”处于选中状态。

  b)更该 Java 程序,我的程序是这样的:

public class ThreeParams extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
      response.setContentType("text/html; charset=GBK");
      ...
  }
}

  粗体字是必需要有的,它的作用是让浏览器把Unicode字符转换为GBK字符。这样页面的内容和浏览器的显示模式都设成了GBK,就不会乱码了。
分享到:
评论

相关推荐

    关于Java+Web技术开发中中文乱码问题的深入探讨.pdf

    学习 Java 中文编码的原理,可以更好地理解中文乱码问题的成因和解决方法。 中文乱码问题是 Java Web 技术开发中一个常见的问题,但通过配置 Tomcat 的编码方式、在 Java 代码中指定编码方式、使用 Unicode 字符等...

    中文乱码解决方案.pdf

    为了解决中文乱码问题,我们需要了解字符编码的基本概念和原理。 二、字符编码的基本概念 字符编码是将字符转换为二进制数据的过程。常见的字符编码有UTF-8、GBK、ISO-8859-1等。UTF-8是一种变长编码,它可以表示...

    《Java Web开发与实战--Eclipse+Tomcat+Servlet+JSP整合应用》.(刘伟,张利国).[PDF].zip

    上传、java mail和分页显示、web编程中文乱码问题及解决方案、应用程序的打包和部署等。书中还深入讲解了客户端验证框架jsvalidation、在线文本编辑器fckeditor和apache commons的一些类库等功能强大的实用开发工具...

    Java Web开发与实战:Eclipse+Tomcat+Servlet+JSP整合应用(含光盘源代码)

    主要内容包括web应用程序运行原理、主流集成开发工具(eclipse/myeclipse)和运行环境(tomcat)的配置和使用、servlet、jsp、jdbc、jsp表达式语言(el)、servlet监听器和过滤器、定制标记库、jstl、mvc模式、dao...

    java web技术开发大全(最全最新)

    4.7.3 实例:解决服务端程序读取中文请求消息的乱码问题 4.7.4 实例:用AJAX技术发送和接收中文信息 4.7.5 实例:在请求消息头和响应消息头中转输中文 4.8 小结 第5章 JSP技术 5.1 用MyEclipse编写第一个...

    cas单点登录技术

    2 CAS原理和协议 3 CAS安全性 4 CAS工作模式 5 系统设计方案 6 CAS关键技术 6.1 域名规范 6.2 中文用户登录提交时乱码 6.3 客户端获取中文用户名及更多信息乱码 7 单点登录风险 7.1 无人看守的桌面 7.2 单点攻击 8 ...

    java web开发技术大全

    4.7.3 实例:解决服务端程序读取中文请求消息的乱码问题 4.7.4 实例:用AJAX技术发送和接收中文信息 4.7.5 实例:在请求消息头和响应消息头中转输中文 4.8 小结 第5章 JSP技术 5.1 用MyEclipse编写第...

    Java面试宝典2020修订版V1.0.1.doc

    7、简述ajax中Js脚本缓存问题该如何解决? 26 8、同步和异步怎么理解?分别在什么情况下使用。 26 9、java后台如何接收ajax数据? 26 10、为什么要有jquery? 26 11、jQuery选择器有多少种? 27 13、你是如何使用...

    基于JSP企业车辆管理系统设计软件程序源码+数据库+WORD毕业设计论文文档.zip

    3.2中文乱码问题处理 16 第四章 系统功能实现 18 4.1系统登陆页面实现 18 4.2总体功能模块 19 4.2.1注册会员管理 20 4.2.1类别信息管理 22 4.2.3商品信息管理 24 4.2.4系统管理 26 4.2.5修改密码 28 4.2.6退出系统 ...

    高级java笔试题-itresource:程序开发技术资源集合

    解决eclipse显示jar源代码中文乱码问题 ] () [ 使用 RMI + ZooKeeper 实现远程调用框架 ] () [ Java 注解指导手册 – 终极向导 ] () [ 轻量级分布式 RPC 框架 ] () [ 一个简单的guava cache 例子] () [ 你应该知道的...

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

    3.4.2 解决中文乱码 3.4.3 获取客户端数据 3.5 response回应对象的应用 3.5.1 HTTP头信息的操作 3.5.2 设置MIME类型 3.5 13页面重定向操作 3.6 Session会话对象的应用 3.6.1 session的生命周期 3.6.2 会话的创建与...

Global site tag (gtag.js) - Google Analytics