`
spring0303
  • 浏览: 26813 次
  • 来自: ...
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

乱码问题

阅读更多
在做Spring Web程序的时候,又遇到了乱码问题!

情况是这样的,所有的 *.jsp , *.java, *.xml 文件都采用了UTF-8编码. 而且在所有的 *.jsp 文件中,都指定了 <%@ page session="false" contentType="text/html;charset=UTF-8" %>

刚开始的时候, 系统运行的很好,比如在一个简单控制器中有:

...
  response.setContentType("text/html;charset=UTF-8");
  PrintWriter out = response.getWriter();
  out.println("<script>alert(\"错了\");window.history.go(-1);</script>");
  out.close;
  return null;

执行后,成功地弹出了中文警告信息. 值得注意的是这里必须通过 response.setContentType 设置响应信息的编码, 因为处理器所在的java文件,采用了UTF-8编码 ,也就是中文 "错了" 这两个字实际上用的是UTF-8的编码. 如果不指定响应信息的编码,中文系统下的浏览器会使用 GB2312 来解码响应信息, 结果自然就是乱码了, 而在响应头中指定了UTF-8编码后, 浏览器会自动用 UTF-8 解码信息, 结果就对头咯.

好拉, 似乎没什么问题了, 但在写完一个表单处理器和相应的jsp后 , 页面提交的中文数据到后台就变成乱码了 !!

为什么? JSP文件是按UTF-8编码编写的,而且已经指定了 <%@ page session="false" contentType="text/html;charset=UTF-8" %> ,那么浏览器为什么没有按照 UTF-8 的编码提交数据呢 ?

后台处理器得到的命令对象是 course ,有 name 和 author 这两个属性:
在经过下面的处理后

String name = course.getName();
name = new String(name.getBytes("ISO8859_1"),"UTF-8");

得到了正确的中文显示!
看来确实有什么东西把我们UTF-8编写的数据,在传递过程中,进行了ISO8859_1编码 !

是Tomcat5.0.30干的么 ? 事实证明跟Tomcat没关系!

我修改了默认的 service.xml 配置, 在
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000"  disableUploadTimeout="true" />中增加了 URIEncoding="UTF-8" ,结果,没有什么变化.

那么只有一个解释了, 那就是浏览器. 也就是浏览器 (不论IE,NS) 把输入的UTF-8编码的数据, 以 ISO8859_1 的编码方式 发送了出去. 不是我瞎猜, 我在 Spring 提供的 过滤器 原代码注释中 看到了这样一句话: Servlet 2.3 Filter that allows one to specify a character encoding for requests. This is useful because current browsers typically do not set a character encoding even if specified in the HTML page or form. 

可以这样翻译:
"Servlet 2.3 规范支持的过滤器允许开发者指定请求的字符编码. 这是很有用的,因为目前典型的浏览器不会设置字符编码,即使已经在页面或者表单指定了", 也就是说, 尽管我在jsp页面中指定了<%@ page session="false" contentType="text/html;charset=UTF-8" %>, 浏览器也不会按照UTF-8编码发送我输入的数据.

现在没办法了, 只有去 web.xml 配置过滤器了. 直接使用了 org.springframework.web.filter.CharacterEncodingFilter, 好啦, POST提交的乱码问题彻底解决了, 注意, 我没有说 GET 哦.
分享到:
评论

相关推荐

    乱码问题的解决

    "乱码问题的解决" 在 Web 开发中,乱码问题是常见的难题之一。乱码问题的出现主要是由于编码不一致引起的。编码不一致可能出现在多个方面,如页面编码、服务器编码、客户端编码、数据库编码等。在本文中,我们将...

    中文乱码问题分析 自己总结的

    中文乱码问题分析 中文乱码问题是 Java 和 JSP 开发中的一种常见问题,主要是由于 Java 和 JSP 源文件的保存方式是基于字节流的,而编译成 class 文件过程中,使用的编码方式与源文件的编码不一致所致。在 Java ...

    FORM表单中文乱码问题分析与解决

    FORM表单中文乱码问题分析与解决 在 Web 开发中,中文乱码问题是一个常见的问题,尤其是在FORM表单传递参数时。这个问题的根本原因是对中文的编码与解码方式不一致。我们可以理解为对中文的加密与解密的密钥不一致...

    hadoop中文乱码问题

    【Hadoop中文乱码问题详解】 在大数据处理领域,Hadoop是一个不可或缺的开源框架,它提供了分布式存储(HDFS)和分布式计算(MapReduce)的能力。然而,在处理包含中文字符的数据时,用户可能会遇到中文乱码的问题...

    解决JSP中文乱码问题

    解决 JSP 中文乱码问题 解决 JSP 中文乱码问题是一个很常见的问题,在 JSP 开发过程中,经常出现中文乱码的问题,可能一至困扰着大家。下面我们将详细讨论 JSP 中文乱码问题的成因和解决方法。 JSP 中文乱码问题的...

    解决web项目中出现的乱码问题,很方便

    在开发Web项目时,乱码问题常常困扰着开发者,它涉及到字符编码的处理,这是Web应用中的一个常见但至关重要的问题。本方案提供了一个简洁有效的解决方法,通过一个Java文件和在`web.xml`配置文件中的简单设置,可以...

    解决Ubuntu和Windows的文件乱码问题

    本文详细介绍了如何解决Ubuntu和Windows在处理文件时发生的乱码问题。 首先,我们需要了解文件乱码的原因。Windows系统中的许多纯文本文件(包括压缩文件)默认使用GBK编码,这是一种针对中文字符的扩展字符集。当...

    利用过滤器解决JavaWeb(JSP)的乱码问题

    在JavaWeb开发中,尤其是涉及到JSP页面时,乱码问题常常困扰着开发者。这个问题的出现通常是由于字符编码不一致导致的,而过滤器(Filter)作为一种强大的工具,可以有效地帮助我们解决这个问题。本文将详细讲解如何...

    Ajax中文乱码问题解决方案

    然而,在处理中文字符时,Ajax请求可能会遇到乱码问题,这主要是由于编码格式不一致或者处理不当导致的。本文将深入探讨Ajax中文乱码问题的成因,并提供一系列解决方案。 **一、问题原因** 1. **编码格式不一致**...

    Netty进制转换乱码问题

    在使用Netty进行TCP/IP通信时,我们可能会遇到数据进制转换导致的乱码问题。这个问题通常是由于数据编码不一致或者处理方式不当所引起的。在本文中,我们将深入探讨Netty中的进制转换和字符编码,并提供解决方案。 ...

    js出现乱码问题介绍大全

    ### JS出现乱码问题介绍大全 #### 一、引言 在Web开发中,字符编码问题经常困扰开发者,特别是当涉及到不同语言环境时。JavaScript作为前端开发的核心技术之一,在处理字符编码方面同样会遇到各种各样的乱码问题。...

    servlet中文乱码问题

    ### Servlet + Tomcat 中文乱码问题解析及解决方案 #### 一、中文乱码问题概述 在使用Servlet和Tomcat进行Web开发时,经常会遇到中文乱码的问题。这主要是因为客户端(如浏览器)与服务器之间使用的字符编码不一致...

    tera term中文乱码问题

    总之,解决Tera Term中文乱码问题的核心在于确保客户端(Tera Term)和服务器端的字符编码一致。通过调整Linux服务器的`/etc/sysconfig/i18n`文件或Tera Term的配置,可以有效地避免中文乱码现象。记住,正确设置...

    log4j乱码问题解决办法

    ### log4j乱码问题解决办法 #### 一、引言 在开发过程中,日志记录是必不可少的一个环节。良好的日志系统可以帮助开发者快速定位问题并进行调试。Log4j作为一款广泛使用的Java日志框架,在很多项目中扮演着重要...

    Request.QueryString 乱码问题

    ### Request.QueryString 乱码问题解析及解决方案 在Web开发中,经常会遇到通过URL传递参数的情况。其中,`Request.QueryString`是ASP.NET中用于获取URL查询字符串(即URL中问号后的部分)的一种常用方法。然而,在...

    JAVA 乱码问题集合

    在Java编程中,乱码问题是一个常见的困扰,尤其是在处理字符编码时。以下是一些关键的知识点,可以帮助理解和解决Java中的乱码问题。 首先,我们需要理解字符编码的基本概念。字符编码是用来表示文本的一种方式,...

    sqlite3 for delphi 解决中文乱码问题

    "sqlite3 for delphi 解决中文乱码问题"这个主题,正是针对这一问题提供了解决方案。这里我们将详细探讨SQLite3在Delphi中的应用,中文乱码的成因,以及如何通过自定义修改来解决这个问题。 首先,SQLite3是一个轻...

    Java Http请求传json数据乱码问题的解决

    在实际解决乱码问题的过程中,如果发现使用Base64加密传输中文数据还会出现问题,可以改用URL编码的方式来传输数据,即使用JavaScript的`encodeURI`函数对数据进行两次URL编码,后端接收到后进行一次URL解码即可。...

    MySQL数据库系统中文乱码问题及解决方案.pdf

    MySQL数据库系统中文乱码问题及解决方案 MySQL数据库系统中文乱码问题是指在使用MySQL数据库系统时,中文字符在存储、传输和显示过程中出现乱码的问题。这种问题的出现是由于字符集和编码方式的不兼容所致。 在...

Global site tag (gtag.js) - Google Analytics