`
zg973595977
  • 浏览: 11963 次
社区版块
存档分类
最新评论

javaweb中文乱码问题

阅读更多

一、文件乱码处理

 

1、文件默认编码:默认使用项目的默认编码
右击文件->Properties->Resource->Text file encoding

 

2JSP文件编码:由于JSP要翻译为Servlet

 

   <%@ page language="java" pageEncoding="utf-8"%>




二、浏览器与服务器传输数据乱码处理

 

1浏览器端编码,一般由服务器端告诉浏览器如何解码数据:

 

1.1Servlet

 

    response.setContentType("text/html; charset=UTF-8"); 或者  response.setCharacterEncoding(“UTF-8”);

 

1.2JSP

 

    <%@ page language="java" contentType="text/html; charset=utf-8" %>

 

1.3、通用

 

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

 

1.4Javascript传参乱码

 

在浏览器端对要传递的中文参数进行编码处理.代码如下: 
       xmlhttp.open("POST",url,true); //请求参数初始化
       xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //因为请求方式为POST,所以这里要设置请求头.(如果请求方式为GET,此句代码可以省略)
       xmlhttp.send("name="+encodeURI(encodeURI("星期日"))); //向服务器端发送参数
在服务器端代码:

 

页面jsp保证是utf-8编码

 

<%@ page contentType="text/html; charset=utf-8"%>

 

接受中文参数
       PrintWriter out = response.getWriter(); //得到response的输出流对象 
       String name1 = request.getParameter("name"); //得到KEY"name"的请求参数 
       String name = URLDecoder.decode(name1,"utf-8"); //对得到的参数进行解码 
       out.print(name); //向浏览器端发送数据

 

1.5热链接传参乱码

 

在传参的jsp对中文进行编码:href="new.jsp?name=java.net.URLEncoder.encode("链接")";

 

在接受的jsp对中文进行转码:String str = URLDecoder.decode(request.getParameter("name "), "utf-8");

 

注:浏览器编码可以由我们手工修改,但最后不要这样,一般让浏览器自动选择即可。




2、服务器端编码,将客户端传过来的数据进行解码: 
浏览器默认使用ISO-8859-1进行编码数据,然后将数据传输到服务器,因此我们默认只需要将浏览器发送过来的数据转换为我们需要的编码即可。

 

2.1、最简单方式:

 

    String username = request.getParameter(“username”);

 

    username = new String(username.getBytes("ISO-8859-1“), "UTF-8");

 

2.2、比较好的解决方案
// 
必须在获取参数之前,调用如下方法先解码 request.setCharacterEncoding(“UTF-8”);

 

String username = request.getParameter(“username”);

 

 

 

2.3、比较通用方案:在一个Filter中更改所有请求的编码方式:

 

A、在src中添加filter来设置编码格式是中文,filter类可以在tomcat的包里面:apache-tomcat-6.0.16.zip\apache-tomcat-6.0.16\webapps\examples\WEB-INF\classes\filters下面,SetCharacterEncodingFilter.java文件 
B、在web.xml中配置
filter,具体配置如下页:

 

<filter>

 

        <filter-name>Set Character Encoding</filter-name>

 

        <filter-class>filters.SetCharacterEncodingFilter</filter-class>

 

        <init-param><param-name>encoding</param-name>

 

       <param-value>utf-8</param-value></init-param>

 

</filter>

 

<filter-mapping>

 

        <filter-name>Set Character Encoding</filter-name>

 

        <url-pattern>/*</url-pattern>

 

</filter-mapping>

 

 

 

2.4GET提交方式中文乱码解决

 

通过修改request.setCharacterEncoding(“UTF-8”);只能解决POST提交方式的请求编码,对GET无效。

 

A、最简单解决方案:
解决方案不再需要任何额外配置(如filter) TOMCAT默认ISO-8859-1 因此可以设置默认编码为UTF-8解决,在conf\server.xml文件中设置如下 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding=”UTF-8”/>

 

B、在tomcat4之后,可以通过如下配置来解决中文乱码,但必须配置filter 
在conf\server.xml文件中设置如下 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" useBodyEncodingForURI=“true”/> 
然后request.setCharacterEncoding(“UTF-8”)也可解决GET乱码

 

 

 

3Java与数据库之间的乱码:
  大部分数据库都支持以unicode编码方式,所以解决Java与数据库之间的乱码问题比较明智的方式是直接使用unicode编码与数据库交互。很多数据库驱动自动支持unicode,如Microsoft的SQLServer驱动。其他大部分数据库驱动,可以在驱动的url参数中指定,如mysql驱动:

 

jdbc:mysql://localhost/MYAPPS?useUnicode=true&characterEncoding=GBK

 

或者使用JAVA程序,修改编码,程序如下:

 

public class Convert {

 

  public static String ISOtoGB(String iso){
  String gb;
  try{
    if(iso.equals("") || iso == null){
      return "";
    }
    else{
      iso = iso.trim();
      gb = new String(iso.getBytes("ISO-8859-1"),"GB2312");
      return gb;
    }
  }
  catch(Exception e){
    System.err.print("
编码转换错误:"+e.getMessage());
    return "";
    }
  }
}

 

 

 

 

 

4Java与文件/流之间的乱码:
  Java读写文件最常用的类是FileInputStream / FileOutputStream和FileReader / FileWriter。其中FileInputStream和FileOutputStream是基于字节流的,常用于读写二进制文件。读写字符文件建议使用基于字符的FileReader和FileWriter,省去了字节与字符之间的转换。但这两个类的构造函数默认使用系统的编码方式,如果文件内容与系统编码方式不一致,可能会出现乱码。在这种情况下,建议使用FileReader和FileWriter的父类:InputStreamReader / OutputStreamWriter,它们也是基于字符的,但在构造函数中可以指定编码类型:InputStreamReader(InputStream in, Charset cs) 和OutputStreamWriter(OutputStream out, Charset cs)。
参考文献:http://sishuok.com/forum/blogPost/list/306.html
http://blog.sina.com.cn/s/blog_5bd6b4510101277p.html

分享到:
评论

相关推荐

    JavaWeb开发中文乱码问题解决方案

    以下是一些关于JavaWeb中文乱码问题及其解决方案的关键知识点: 1. **字符编码基础**:理解字符编码是解决问题的第一步。常见的字符集有GBK、GB2312(简体中文)、Big5(繁体中文)以及Unicode家族的UTF-8、UTF-16...

    JavaWeb的各种中文乱码终极解决方法

    JavaWeb 中文乱码问题是一个常见的问题,解决方法有多种,但都需要了解字符编码、响应头和 Servlet 输出机制等知识。本文将从Servlet 输出乱码、Servlet 文件下载乱码两方面详细讲解 JavaWeb 中文乱码的解决方法。 ...

    关于处理Javaweb中中文乱码的问题文.pdf

    在 JavaWeb 技术开发中,中文乱码问题是由于 Java 系统的输入、输出和操作系统的默认编码字符集不一致导致的。 Java 系统内部使用 Unicode 来表示字符,但是在实际应用中,由于应用程序的运行环境不同,和各个本地...

    javaweb乱码

    以下是对javaweb中文乱码问题的详细解析和解决方案: **乱码原理:** 1. **请求乱码**:在IE浏览器中,用户填写的数据(如中文“中国”)是以当前页面的字符编码(如UTF-8或GBK)提交的。当这些数据通过HTTP请求...

    中文乱码javaWEB开发各种解决中文乱码问题

    在Java Web开发过程中,中文乱码问题是开发者经常遇到的一个挑战。中文字符的正确显示与处理涉及到编码、解码以及服务器配置等多个环节,若任一环节处理不当,都可能导致中文字符显示为乱码。本文将详细探讨Java Web...

    JavaWeb开发技术-解决中文输出乱码问题.docx

    总结来说,解决JavaWeb开发中的中文乱码问题,关键在于正确地设置字符编码。使用`HttpServletResponse`的`setCharacterEncoding`和`setContentType`方法可以确保数据在传输过程中的编码与接收端的解码保持一致,从而...

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

    此外,对于"中文乱码问题.txt"这样的文本文件,如果在读取或写入时没有正确指定编码,也可能导致乱码。Java中,我们可以使用`BufferedReader`和`BufferedWriter`的构造函数,明确指定字符集来避免这种情况。 总之,...

    JavaWeb开发技术-解决中文输出乱码问题.pptx

    JavaWeb开发技术-解决中文输出乱码问题 JavaWeb开发技术是指使用Java语言开发Web应用程序的技术,涵盖了从基本的Servlet和JSP到高级的框架和架构模式的各种技术。其中,解决中文输出乱码问题是JavaWeb开发中一个...

    关于处理Javaweb中中文乱码的问题[收集].pdf

    关于处理Javaweb中中文乱码的问题[收集].pdf

    解决JavaWeb开发中Jsp存储读取MySQL数据中文乱码的问题.pdf

    解决JavaWeb开发中Jsp存储读取MySQL数据中文乱码的问题.pdf

    JavaWeb开发中的中文乱码问题分析及解决方案.docx

    ### JavaWeb开发中的中文乱码问题分析及解决方案 #### 摘要 在JavaWeb开发过程中,中文乱码问题是常见的技术挑战之一。该问题源于不同组件间的编码方式不一致,尤其是在涉及用户输入、数据库交互以及页面展示等环节...

    超全面javaweb第4天- 05 xml的中文乱码问题解决

    超全面javaweb第4天-_05_xml的中文乱码问题解决

    JavaWeb中文乱码处理研究 (2010年)

    在JavaWeb应用开发常见的问题中,中文的乱码问题在页面中没有统一的方法解决,造成程序员浪费大量的时间与精力且代码效率不高,因此提出了新的乱码算法,并设计了通用的乱码处理器,提高了程序员的工作效率。

    JavaWeb应用中文乱码的解决方案 (1).pdf

    JavaWeb应用中文乱码问题是一个常见的困扰,尤其是在处理用户输入或者显示中文字符时。这个问题主要源于字符编码的不一致,即不同的系统或组件使用了不同的字符集,导致数据在转换过程中出现混乱。以下是对JavaWeb...

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

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

    javaweb乱码解决方法

    综上所述,解决JavaWeb中的乱码问题需要从多个方面入手,包括但不限于HTML文档、Servlet请求响应、数据库连接、数据库表定义及服务器配置。只有确保各个环节的字符集设置一致且正确,才能有效避免乱码问题的发生。

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

    ### 利用过滤器解决JavaWeb(JSP)乱码问题 #### 一、问题背景与重要性 在JavaWeb开发中,特别是在使用JSP技术时,开发者常常会遇到中文字符显示异常的问题,即所谓的“乱码”。这不仅影响用户体验,还可能导致数据...

    javaweb中文过滤器

    总之,JavaWeb中文过滤器是解决中文乱码问题的关键工具,通过统一编码标准和自定义处理逻辑,保证了数据在Web应用中的正确传输。开发者可以根据实际需求,自定义过滤器来增强其功能,提高应用的健壮性和用户体验。

Global site tag (gtag.js) - Google Analytics