`
lxk1314
  • 浏览: 64921 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

jsp乱码

阅读更多
【转自】http://www.blogjava.net/terryxue/archive/2009/12/17/306326.html

服务器返回乱码页面,请求的数据发送到服务器后取出来是乱码,以上两个问题是web开发人员经常遇到的问题,解决这类问题需要理解乱码问题的根源所在。

1. 字符编码
字符是以二进制编码的形式保存在存储器中的,如:“我”这个字,可以用gbk的方式保存(用字节表示是[-50, -46]),也可以用utf-8的方式保存(用字节表示是[-26, -120, -111])。程序在读取数据块时需要一个字节一个字节的读取,然后将字节转换为字符,显然如果程序不知道字节是表示的什么编码的字符,读出来就会出问题,这就如同你说了一句话,我如果事先不知道你说的将是什么语言,就没法去翻译了,如果你说的英语,我以为是日语,然后按日语的方式来理解到我的主观意识,显然结果就是不知你在说什么了,就成了我们程序中的乱码。所以对于前面我所表示的字节数组byte[] data = {-26, -120, -111},我们必须这样做才能得到正确的字符: String s = new String(data, "utf-8"),(注:这里用了字符串,因为字符串就是由一个个字符组成的),如果我们不指定参数里面的"utf-8",那么系统就会用操作系统默认的编码了,这可能是gbk或是什么任何编码。

2. jsp服务器返回乱码页面
  2.1 pageEncoding
  在jsp页面的page指令中我们指定了pageEncoding属性,这个属性就是告诉jsp容器如何读取这个jsp页面,所以这个属性必须与jsp页面保存的编码保持一致。也就是说,如果你页面的编码保存为gbk, 而pageEncoding设置成了utf-8,则jsp容器在读这个jsp页面的时候就会出错(如果存在非英文字符的话)。jsp容器读jsp的目的是将其翻译成java代码,所以如果读错了jsp页面,翻译出来的java代码也就会出错,如果这种错误影响了java文件的语法,就会在访问时出现无法编译jsp的语法错误,如果没有影响到语法,就会出现最终显示的html页面上有乱码的错误。所以如果遇到显示乱码,则检查pageEncoding是否正确。
  2.2 contentType
  page指令中的contentType属性用于指定返回给浏览器的数据的文档类型,服务器通过http头信息返回给浏览器这个信息,所以在浏览器 html代码中用户是看不到的。同时contentType属性还可以指定页面的编码,即服务器即以什么编码发送页面数据。比如说中文数据,可以用gbk 或utf-8的方式来发送,这个编码跟jsp页面的编码没有关系,只要设定的编码支持页面中的字符就行了。相同于有了一个字符串s="中国人",然后用 s.getBytes("gbk")的方式来发送s。所以由于contentType错误出现乱码的概念不高,但也要注意一下,比如说如果设置成了"iso8859-1",则浏览器就会显示乱码了。contentType还有一个用,就是浏览器将会依据这个编码来显示页面,在IE下点右键,然后选择“编码”,你就可以注意到页面是以什么编码显示的了。
  2.3 如果是servlet返回的结果
  上面说的是jsp,如果servlet的话就要注意设置response.setCharacterEncoding(""),如果没有设置,服务器会默认为是iso8859-1,设置后得到的writer(即response.getWriter())对象,就会依据这个编码来向客户端写数据,writer对象的构造与以下方式类似:PrintWriter pw = new PrinterWriter(new OutputStreamWriter(socket.getOutputStream(), "编码")),这里提到了通过socket得到输出流,不明白的话可以参考我的另一篇文章。pw.write("你好"),实际上就是先通过byte[] data = "你好".getBytes("编码"),然后将data写给客户端。
)

3. 服务器得到客户端传过来的数据为乱码
  3.1 通用解决方案
  String param = request.getParameter("paramName"),如果浏览器传过来的为中文,则取出来的数据将是乱码。为什么呢?因为客户端只能将数据的编码传给服务器,如[-26, -120, -111],但服务器并不知道这是什么字符集的编码,于是假定为iso8859-1, 用这种方式构造了字符串s = new String(data, "iso8859-1"),显然这样肯定是乱码。解决方案很简单,我们得到值param后,用byte data[] = param.getBytes("iso8859-1"),这样data就是客户端传过来的真实编码,然后我们再重新创建字符串:param = new String(data, "正确的编码");
  3.2 POST请求
  如于post请求处理起来更简单,get请求与post请求向服务器发送数据的方式不一样,get请求的参数是通过HTTP头信息中的第一行数据发送的,是URI的一部分,而post请求则是在发送完HTTP头信息后作为单独的数据块发送的。因此对于get请求的参数,我们在使用request之前服务器已经读出来了,已经是乱码了,只能用前面的方案,但对于post请求的数据,我们在调用getParameter或getReader之前,服务器并没有去处理,所以我们可以在getParameter之前先告诉服务器正确的编码,通过request.setCharacterEncoding("正确的编码"),然后再读取参数。

4 AJax
  对于ajax请求注意要用utf-8编码,request和response都需要使用utf-8
分享到:
评论

相关推荐

    JSP乱码 N种解决方案

    本文将深入探讨“JSP乱码”的多种解决方案,并提供实用的解决策略。 1. **理解字符编码的基本概念** - 字符编码是计算机对文字进行存储和处理的标准,常见的有ASCII、GBK、UTF-8等。 - JSP页面默认使用ISO-8859-1...

    JSP乱码解决方案

    JSP乱码通常发生在字符编码不一致或者处理不当的情况下,这会影响用户界面的显示,导致文字显示为不可读的方块或者特殊字符。本文将深入探讨JSP乱码的原因及其解决方案,帮助开发者有效地处理这类问题。 ### 1. JSP...

    jsp乱码解决方案 本方案解决了jsp常见的乱码问题

    ### jsp乱码解决方案 #### 一、引言 在Web开发中,特别是使用Java Server Pages (JSP)进行开发时,字符编码问题是一个经常遇到的技术难题。如果处理不当,很容易导致网页显示乱码,影响用户体验及数据的正确性。...

    jsp乱码的3种解决方法

    本文将详细讲解三种解决JSP乱码的方法。 ### 1. 设置页面编码 JSP页面的编码设置是解决乱码问题的基础。在JSP文件的顶部,使用`<%@ page>`指令设置页面编码。例如: ```jsp ;charset=UTF-8" language="java" %> `...

    jsp 乱码详解(jsp,mysql,tomcat)

    jsp 乱码详解(jsp,mysql,tomcat) 基本涵盖所有的乱码解决方法。使用的utf-8作为例子

    jsp编码 jsp乱码

    jsp编码 jsp乱码解决方案 jsp编码是Java Web开发中的一项重要技术,jsp编码直接影响着Web应用程序的正常运行。jsp编码乱码问题是jsp开发中常见的问题之一,该问题可能会导致jsp页面显示乱码,影响用户体验。因此,...

    JSP乱码问题

    JSP乱码问题解决方案 JSP乱码问题是指在JSP页面中遇到的字符编码问题,导致页面显示乱码的现象。下面是解决JSP乱码问题的一些常见方法: 首先,在JSP页面中,我们可以使用String的getBytes()方法将字符串转换为...

    jsp乱码解决超酷,通过web.xml配置

    "jsp乱码解决超酷,通过web.xml配置"这个标题表明,我们将通过配置`web.xml`文件来解决JSP页面中的乱码问题。下面将详细介绍这个过程以及相关的知识点。 首先,我们需要理解JSP乱码产生的原因。当用户通过表单提交...

    Jsp乱码解决方案 word文档

    JSP乱码问题主要由字符编码不一致引起,通过统一和正确地设置各个环节的编码,可以有效避免这类问题。对于具体的项目,需要根据实际情况分析乱码产生的环节,并针对性地调整相关配置。提供的解决方案涵盖了常见的...

    Jsp乱码问题解决

    ### JSP乱码问题解决 #### 一、JSP页面显示乱码 在JSP页面开发过程中,中文乱码是一个常见的问题。这个问题主要是由于服务器端和客户端(浏览器)的编码设置不一致导致的。 **原因分析:** 1. **服务器编码设置...

    jsp乱码解决方法.txt

    ### JSP乱码问题及其解决方法 #### 一、引言 在进行Java Web开发时,经常遇到的一个问题是页面字符编码出现乱码的情况。虽然这看似是一个小问题,但如果处理不当,会对用户体验甚至整个项目的质量产生严重影响。...

    JSP乱码解方案.doc

    《JSP乱码解决方案详解》 在Web开发中,JSP乱码问题一直是困扰开发者的一个常见问题。本文将深入探讨JSP乱码的产生原因及其解决方案,帮助开发者准确理解和处理各种可能出现的乱码情况。 首先,JSP乱码的产生主要...

    jsp乱码处理综合

    【JSP乱码处理综合】 在开发Java Server Pages (JSP) 应用程序时,中文乱码问题是一个常见的困扰。以下是对这个问题的详细解析和解决方案: 一、JSP页面显示乱码 当JSP页面中的中文无法正常显示时,这通常是因为...

    jsp乱码解决的一些技巧

    ### JSP乱码问题及其解决技巧 在进行Web开发时,尤其是使用JSP技术栈时,经常遇到的一个问题是字符编码不一致导致的乱码问题。本文将基于提供的JSP乱码解决方案,详细介绍如何通过设置合适的编码来避免或解决乱码...

    Jsp乱码问题解决2

    ### JSP乱码问题及其解决方案 #### 一、最基本的乱码问题 JSP页面中出现乱码最常见的原因是页面编码不一致。例如,在JSP页面中设置了多种不同的编码格式,这会导致浏览器无法正确解析中文字符,从而显示为乱码。...

    JSP乱码解决方案J2EE

    《JSP乱码解决方案J2EE》 在Java和JSP开发中,中文乱码问题是一直困扰开发者的老大难问题。这个问题的根源在于Java的内核和class文件基于Unicode编码,而许多其他数据存储媒介如数据库、文件、流则通常使用其他编码...

    jsp乱码解决方案大全

    ### JSP乱码解决方案大全 #### 一、概述 在使用Java Server Pages(JSP)进行Web开发时,经常会遇到中文乱码的问题。这不仅影响用户体验,还可能导致数据错误。本文将详细介绍JSP中出现乱码的原因及相应的解决方法...

    jsp页面乱码处理

    本文将根据“jsp页面乱码处理”的标题与描述,深入解析解决JSP乱码问题的策略,并结合具体代码实例,帮助开发者彻底摆脱这一难题。 #### JSP乱码的根本原因 JSP页面的乱码通常源自字符编码不一致,即不同环节使用...

    jsp乱码详解整理.docx

    总之,JSP乱码问题主要涉及请求和响应的编码设置,以及页面自身的编码声明。通过正确设置字符集,大多数乱码问题都可以得到解决。对于特殊情况,如服务器配置或浏览器兼容性问题,可能需要额外的调整或使用过滤器来...

    JSP乱码问题相关的一些集锦

    ### JSP乱码问题及其解决方法 在进行Web开发时,尤其是使用JSP技术栈时,经常遇到的一个问题是页面出现乱码。这类问题虽然看似简单,但若处理不当,则会严重影响用户体验。本文将针对JSP乱码问题进行深入探讨,并...

Global site tag (gtag.js) - Google Analytics