`
koutou
  • 浏览: 1056 次
  • 性别: Icon_minigender_1
  • 来自: 天津
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

[转]jsp/servlet取参数乱码问题分析

阅读更多

问题的来源和根本原因:
    这个话题是个很古老的话题,从jsp/servlet一出现就有了,对经常和汉字打交道的朋友来说,遇到最多的就是表单页面提交的中文参数 在服务器端直接用String myparam=request.getParameter("myparam");这里myparam的值将会是乱码。于是,有了这个解决方案:String myparam=new String(request.getParameter("myparam")。getBytes("ISO-8859-1"),"GBK");那么这个问题的本质是什么呢?大家如果看过servlet的规范,或者研究过tomcat的源码,就会发现问题的原因:实际上在 servlet引擎实现 request.getParameter("myparam")时,会先在一个缓存里找一下,如果没有,就会开始解析参数并把解析后的参数和其对应的值放入缓存中。而在解析参数时,servlet规范中规定:首先按照 request.getCharacterEncoding获取的编码对解析出来的byte进行编码,创建新的字符串。如果request.getCharacterEncoding 的值是null,则按照ISO-8859-1来进行编码。而现在大多的浏览器在发送数据时都没有发送客户端的数据编码。所以在没有预先设置过的情况下,引擎应该都是按着ISO-8859-1来处理参数的值。
    假如表单的参数实际值是“中国” 那么按着GBK的编码提交到服务器端的myparam的值对应的应是4个byte.假设 解析出来的byte 是paramBytes,那么引擎为我们放入参数缓存中的参数值就是这样的 new String(paramBytes,encoding);很明显本来2个字节参能表达一个汉字 ISO-8859-1来编码之后,每个字节都成了单独的一个字符:4个字节成了四个字符,这就是我们看到的乱码出现的原因。
    所以 new String(request.getParameter("myparam")。getBytes("ISO-8859-1"),"GBK"); 实际上在进行还原操作。
    需要注意的是按GBK进行编码还原的前提是你表单页面的表单数据是按GBK进行编码的。这个主要是通过<meta http-equiv="Content-Type" content="text/html; charset=GBK">来保证的。当然如果你的页面是jsp,并且在jsp页面头上设置了<%@ page contentType="text/html;charset=GBK" language="java" %>那么在浏览器里打开这个页面时浏览器会自动设置页面编码为GBK

 

分享到:
评论

相关推荐

    jspservlet取参数乱码问题分析

    ### jspservlet取参数乱码问题分析 #### 一、问题本质及原因分析 在Java Web开发中,尤其是在处理中文参数时,经常会遇到一个常见问题——**jspservlet取参数乱码**。这一现象通常发生在当用户从客户端提交包含...

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

    jsp 传参 servlet 接收中文乱码问题的解决方法 jsp 传参 servlet 接收中文乱码问题是一个经常遇到的问题,特别是在使用 Hibernate+Servlet 框架时。当我们在 jsp 页面传参到 servlet 时,中文字符经常会出现乱码...

    jsp/servlet阶段测试

    jsp/servlet阶段测试 本资源总结了jsp和servlet的阶段性测试,涵盖了servlet和jsp的基础知识点,包括servlet的生命周期、jsp的隐含对象、Filter的用途、Listener的类型、Request、Session和Application的区别等。 ...

    jsp+servlet+mysql乱码解决的这天

    jsp+servlet+mysql乱码解决方案是指在使用jsp+servlet+mysql开发web应用程序时,如何解决中文乱码问题的解决方案。该方案通过设置每个页面的编码格式为utf-8,控制器servlet中的请求编码格式为utf-8,数据库连接url...

    Jsp和Servlet中文乱码问题

    本文将深入探讨JSP和Servlet中文乱码问题的根源、解决方案以及预防策略。 ### JSP和Servlet中的中文乱码问题根源 中文乱码问题通常源于字符编码不一致或配置错误。在Web应用中,数据流经多个环节,包括客户端...

    JSP/Servlet 中的汉字编码问题

    JSP/Servlet 中的汉字编码问题 ...’、乱码的由来 JSP/Servlet 汉字编码问题及在 WAS 中的解决办法 结束语 参考文章 1. 问题的起源每个国家(或区域)都规定了计算机信息交换用的字符编码集,如美国的扩展 ASCII码, 中

    servlet输出JS乱码问题

    知识点:Servlet输出JS乱码问题解析与解决方案 一、Servlet与JS输出背景 Servlet是Java Web应用中的核心组件,主要用于处理客户端发送的HTTP请求,并生成响应。在Web开发中,Servlet经常被用来处理业务逻辑,然后...

    解决jsp+servlet开发中的中文乱码问题

    ### 解决JSP+Servlet开发中的中文乱码问题 #### 概述 在基于JSP(Java Server Pages)和Servlet技术的Java Web应用开发过程中,中文乱码问题一直是困扰开发者的一大难题。由于Java Web应用程序涉及多个组件之间的...

    servlet与jsp中文乱码处理

    通过以上方法,基本可以解决servlet和jsp在接收和显示中文时的乱码问题。但在实际开发中,可能还需要根据具体环境和需求进行调整。了解这些知识点,对于Java Web开发者来说是非常必要的,能够提高项目的稳定性和用户...

    jsp/servlet javamail 发送邮件 可发送多个附件

    在Java Web开发中,JSP(JavaServer ...总的来说,这个JSP/Servlet邮件系统利用JavaMail API实现了发送多附件邮件的功能,但也需要注意编码问题和安全性。通过不断优化和调试,可以构建出稳定且功能丰富的邮件服务。

    javaweb servlet(jsp)的乱码问题原理及解决

    ### javaweb servlet(jsp)的乱码问题原理及解决 #### HTTP协议的基本理解与乱码问题背景 HTTP协议作为互联网应用中最为广泛使用的通信协议之一,它定义了客户端和服务端之间的交互规则。HTTP请求主要分为GET和...

    Servlet、Jsp乱码问题(三)

    本文将深入探讨Servlet和JSP中的乱码问题及其解决方法。 首先,我们需要理解字符编码的基础知识。在计算机中,字符编码是用来表示文本的方式,常见的有ASCII、GBK、UTF-8等。不同的编码格式可能导致相同字符的二...

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

    在开发基于JSP和Servlet的Web应用时,中文乱码问题是一个常见的困扰许多开发者的难题。尤其是当JSP页面向Servlet传递中文参数时,如果不正确地处理,很容易出现乱码的情况,影响用户使用体验和数据准确性。下面,我...

    JSP+SERVLET教程

    #### 七、Web应用乱码问题 - **常见问题**:中文或其他非英文字符在Web应用中的显示问题。 - **解决方案**:通过设置正确的字符集编码(如UTF-8),并在服务器、客户端和数据库之间保持一致的编码设置。 #### 八、...

    Servlet及jsp解决中文乱码问题

    ### Servlet及JSP解决中文乱码问题 #### 一、引言 在Web开发中,中文乱码问题一直是困扰开发者的一大难题。特别是在使用Java技术栈(如Servlet与JSP)进行开发时,如果处理不当,很容易出现中文字符显示乱码的情况...

    servlet中文乱码问题

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

    解决servlet页面乱码问题

    本文将深入探讨如何解决Servlet页面显示乱码的问题,这对于初学者来说是至关重要的知识点。 首先,我们需要理解乱码的根源。在Web应用中,乱码通常出现在两个阶段:输入(如POST表单数据)和输出(如HTML页面的响应...

    JSP_Servlet 中的汉字编码问题.pdf

    - 在JSP/Servlet环境中,处理汉字时经常遇到的问题就是字符集和编码之间的转换不当导致的乱码问题。 2. **乱码产生的原因**: - 不同的系统或组件可能使用不同的默认字符集,当数据在不同系统之间传输时,如果...

    servlet过滤器解决乱码问题

    ### Servlet过滤器解决乱码问题 在Web应用开发过程中,字符编码问题经常出现,尤其是在处理中文等多字节字符时。如果不正确地设置字符编码,可能会导致页面显示乱码。本文将详细介绍如何通过Servlet过滤器来解决这...

    jsp和servlet操作mysql中文乱码问题的解决办法.docx

    解决 JSP 和 Servlet 操作 MySQL 中文乱码问题的方法 在 JSP 和 Servlet 操作 MySQL 过程中,中文乱码问题是一个常见的问题,而解决这个问题需要从多方面入手,包括 JSP 页面、Servlet 编程和 Filter 配置等。本文...

Global site tag (gtag.js) - Google Analytics