`
lixw
  • 浏览: 201713 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
阅读更多

这两天在做一个简单WEB项目的时候出现了程序部署到WAS上后字符乱码的问题,参考了一些网上的资源,解决如下:

1、系统本身存在一个编码过滤器,它调用:

request.setCharacterEncoding("GBK");

 设置编码;

2、页面使用:

<%@ page contentType="text/html;charset=GBK" pageEncoding="GBK"%>

 进行编码;

3、在Tomcat服务器下面,利用:

String paramValue = request.getParameter("paramName");

 得到的值需要进行转码,采用下面的方式:

paramValue = new String(paramValue.getBytes("ISO-8859-1"), "GBK");

 而以上转码操作在WAS环境下是不需要的。

 

 

附参考资源:

改变Websphere中request编码

kingswood 2006年4月

 

在websphere中,中如果一个web应用的ibm-web-ext.xmi文件的属性autoRequestEncoding="true";

页面中get和post方式传递的编码就是你所在区域的编码,如果是中国大陆就是gb2312,除非你在页面中显式地调

用request.setCharacterEncoding("GBK");这样才可以改变编码,这样对需要支持繁体的话很不方便,按照

websphere的官方文档

如果 autoRequestEncoding 值设置为 true ,客户机没有在请求头中指定字符编码,并且此代码不包含 setCharacterEncoding(String encoding) 方法,则 Web 容器尝试为请求参数和数据确定正确的字符编码。

Web 容器执行以下列表中的每个步骤,直至找到匹配:

  • Content-Type 头中查看字符集(charset)。
  • 尝试使用所定义的属性,将服务器语言环境映射到字符集。
  • 如果设置,则尝试使用 DEFAULT_CLIENT_ENCODING 系统属性。
  • 将 ISO-8859-1 字符编码用作缺省。

经过试验根本不行,发现websphere的安装目录下WebSphere\AppServer\properties\encoding.properties

的文件包括了地区与编码的映射表,将中国对应的gb2312改为gbk,重启服务,发现默认编码已经更改,可以支持繁

体字.

 

有关Web应用服务器的显示编码问题

 

刘睿 2005年7月

 

最近和一个软件开发商的工程师聊了一下Web应用服务器的显示编码问题,于是感觉不少人虽然玩了多年的软件,对这个问题还是云里雾里,很少有人能清晰地说 明这一问题,网上也基本没有相关的精辟的文章。所以在这里就简单介绍一下,帮初学者入入门。需要指出的是,不同的Web应用服务器很可能采用不同的方式。 这里仅仅以IBM WebSphere为例,其它服务器比如Tomcat和WebLogic,以后有机会再说吧。

1. 浏览器的设置:

1.1 浏览器的语言相关设置:
  IE浏览器会把自己支持的语言(在IE浏览器可以设置该语言选项)通过HTTP请求头 Accept-Language,并上传给Web服务器供参考。但服务器一般都忽略HTTP请求头Accept-Language,我知道有些应用程序就 通过读这个HTTP请求头(Accept-Language)来实现一定的国际化。(注:WebSphere对Servlet的扩展属性 autoRequestEncoding和autoResponseEncoding就是利用这个“Accept-Language”。)
  另外,如果HTML没有定义“<META http-equiv="Content-Type"...>”,且服务器也没有返回HTTP头Content-Type和Content-Language,就以自己首选的语言解释HTML。

1.2 浏览器缓存:
  浏览器重复访问同一网页时,发送的HTTP头(last-modified),服务器可以返回HTTP Code 304 - Not Modified,于是从本地缓存取网页。
  有时候语言环境变了,浏览器的显示还没变,就可能是缓存的问题。
  当然一般浏览器都有主动选择变换语言的功能,实际上是用不同的语言解释显示的HTML。

2. 浏览器如何理解HTTP返回内容的编码:
  首先,看服务器返回的HTTP头Content-Type;
  其次,看HTML中的“<META http-equiv="Content-Type"...>”;
  最后,看服务器返回的HTTP头Content-Language,注意Content-Language与服务器默认的文件编码一致。

2.1 WebSphere服务器返回HTML时,其返回数据的HTTP头Content-Type不包含字符集。所以说:其HTML数据的编码必须和 “<META http-equiv="Content-Type"...>”声明一致,这样才能让浏览器有正确的理解。如果你在WebSphere Studio或者Eclipse中开发HTML,这种一致性是由该工具保证的。
  服务器在发送HTML时,服务器不会做任何编码转换。如果有必要,浏览器在显示时自己进行转换(对用户透明)。

2.2 WebSphere服务器调用Servlet或JSP时,其返回数据的HTTP头Content-Type肯定包含字符集(默认是ISO- 8859-1),所以HTML中的“<META http-equiv="Content-Type"...>”声明必然被忽略。
  那么,这个HTTP头Content-Type是怎么决定的呢?在Servlet,使用ServletResponse接口的 setContentType;在JSP中,参见声明“<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030" %>”中的contentType部分。(注意JSP声明中的pageEncoding部分,指的是JSP源文件(对比Java源文件)的编码。对 WebSphere来说,JSP源文件的默认编码可以由JVM命令行参数-Ddefault.client.encoding=...来设置。)
所以说:其Servlet和JSP的数据的编码必须与其相应的声明一致,这样才能让浏览器有正确的理解。如果你在WebSphere Studio或者Eclipse中开发JSP,这种一致性是由该工具保证的。

3. 服务器如何理解HTTP请求参数的编码:
  服务器得到客户机的GET或POST请求时,一般都会有一些参数。这些参数很可能是从浏览器输入的,也可能是带在HTML中的,那么服务器如何理解这些参数的编码呢?
  这个问题实际上并没有得到圆满的解决。一般服务器都会忽略IE浏览器的语言选项决定的HTTP请求头(Accept-Language),所以就不知 道浏览器输入的数据的编码。于是只能使用ServletRequest接口的setCharacterEncoding方法来设置。对WebSphere 来说,还可以使用JVM命令行参数-Ddefault.client.encoding=...来设置一个默认值。
  值得一提的是,如果没有任何设置,WebSphere就按照ISO-8859-1来解释,也可以通过一个简单的校正的方法得到原始的参数值(比 如:new String( paramValues[0].getBytes("8859_1"), "GBK" ))。其它的Web应用服务器不一定采取相同的办法。比如WebLogic8就默认使用UTF-8来解释参数的编码,而且不支持简单的校正。
  如果你愿意使用WebSphere扩展的非标准Servlet属性autoRequestEncoding和autoResponseEncoding,就能利用HTTP请求头(Accept-Language)来决定HTTP请求参数的编码。

分享到:
评论

相关推荐

    最全的编码问题,乱码问题,uft-8

    本文将详细探讨编码问题中的两大常见编码格式:UTF-8与GBK,并通过具体的设置步骤来解决常见的乱码问题。 #### 二、字符编码概述 字符编码是计算机中表示字符的一种方式,不同的编码系统用于处理不同的字符集。在...

    log4j乱码问题解决办法

    - **使用统一编码**:为了减少乱码问题的发生,建议在项目中尽可能使用统一的编码格式。一般情况下,UTF-8是最常用也是最推荐的选择。 #### 五、总结 通过以上步骤,可以有效地解决log4j中的乱码问题。正确的日志...

    java中文乱码问题详解--- java中文乱码问题详解

    2. **显式指定编码**:在进行文件读写、网络通信等操作时,显式指定字符集编码,以避免默认编码带来的乱码问题。 3. **配置JVM和Web容器**:合理配置JVM和Web容器的字符集参数,确保在运行时能够正确地处理各种编码...

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

    总之,解决JavaWeb中的乱码问题需要从多个层面进行考虑:设置过滤器统一请求和响应的编码,确保JSP页面的编码正确,以及在处理文件时注意文件内容的编码。通过这些方式,我们可以有效防止和解决乱码问题,提高应用...

    js出现乱码问题介绍大全

    JavaScript作为前端开发的核心技术之一,在处理字符编码方面同样会遇到各种各样的乱码问题。本文将详细介绍JavaScript中常见的乱码现象及其解决方案,帮助开发者更好地理解和解决这类问题。 #### 二、JS乱码问题...

    Ajax中文乱码问题解决方案

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

    乱码问题的解决

    "乱码问题的解决" 在 Web 开发中,乱码问题是常见的...乱码问题的解决需要从多方面入手,包括设置页面编码、服务器编码、客户端编码、数据库编码和超链接的 url 编码等。只有通过统一编码,才能避免乱码问题的出现。

    用C#2005解决文件编码问题和文件显示乱码问题

    在编程领域,尤其是在处理文本文件时,文件编码和字符乱码问题是一个常见的挑战。本文将深入探讨如何使用C# 2005解决这些问题。C#是一种强大的编程语言,广泛应用于Windows应用程序开发,包括文件操作。 首先,让...

    java zip压缩解压工具解决中文乱码问题

    以上代码片段展示了如何利用Apache Commons IO库来处理中文乱码问题,使得在Java中进行ZIP文件的压缩和解压更加便捷和准确。在实际开发中,根据项目需求,可以选择使用标准库或者Apache Commons IO库,确保文件名和...

    java android zip解压缩(解决压缩中文乱码问题)

    然而,当压缩文件包含中文字符时,解压缩过程中可能会遇到乱码问题。这是因为编码格式不匹配或者处理方式不当导致的。本篇文章将深入探讨如何在Android平台上解决Java ZIP库在解压缩中文文件时出现的乱码问题。 ...

    js中文乱码问题分析及解决方案.docx

    如果Web页面和JavaScript文件使用不同的编码,可能会出现乱码问题。本文将分析JavaScript中文乱码问题的原因,并提供相应的解决方案。 一、JavaScript中文乱码问题的原因 在Web开发中,我们经常使用JavaScript文件...

    struts 中文乱码问题解决

    在Struts应用中,中文乱码问题最常见的原因是编码设置不一致。服务器端和客户端之间的数据传输如果使用不同的字符集,就会导致乱码现象。例如,当客户端以UTF-8编码发送请求,而服务器端却以GBK编码接收时,就会出现...

    深入分析 Java 中的中文编码问题

    Java中默认使用的是Unicode编码,但在处理外部数据时,如读取文本文件、接收HTTP请求或连接数据库时,如果没有正确设置编码,就可能导致乱码问题。例如,当读取GBK编码的文本文件,而使用UTF-8解码时,会出现乱码。 ...

    解决gb2312编码导致乱码问题

    标题提到的“解决gb2312编码导致乱码问题”是一个典型的字符编码问题,它涉及到如何在不同的编码格式之间正确转换,以确保中文字符在传输和显示时的正确性。gb2312是一种较老的中文字符编码标准,主要用于简体中文,...

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

    在 Java 与数据库之间的乱码问题中,大部分数据库都支持以 unicode 编码方式,所以解决 Java 与数据库之间的乱码问题比较明智的方式是直接使用 unicode 编码与数据库交互。很多数据库驱动自动支持 unicode,如 ...

    SAS EG导入UTF-8编码的文本数据文件时的乱码问题解决方法

    在使用SAS EG(Enterprise Guide)导入编码为UTF-8的文本数据文件时,用户可能会遇到中文乱码问题。UTF-8编码的文本文件在处理中文字符时,如果没有正确设置编码,可能会导致中文字符显示不正确,即出现乱码现象。...

    Java开发Client客户端,连接Windows的Telnet服务器,解决了中文乱码问题

    本文将详细探讨如何使用Java开发这样的客户端,并解决在处理中文字符时可能出现的乱码问题。 首先,让我们了解Java中的Socket编程。在Java中,`java.net.Socket`类提供了TCP/IP套接字功能,可以用于建立客户端到...

    Servlet及jsp解决中文乱码问题

    4. **表单提交方式引起的编码问题**:不同的表单提交方式(GET与POST)对于编码的处理方式不同,如果不加以处理,也会导致乱码问题。 #### 三、解决中文乱码的具体方法 ##### 1. 数据库配置 - **MySQL数据库配置*...

    jsp页面文档编码问题

    总的来说,理解和正确使用`contentType`和`pageEncoding`是解决Java Web开发中乱码问题的关键。通过清晰的编码策略和规范的编码实践,可以避免许多不必要的编码困扰,提高项目的稳定性和用户体验。

Global site tag (gtag.js) - Google Analytics