`
doujun1998
  • 浏览: 12991 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java 中文乱码问题

阅读更多
在编程语言中关于中文乱码已经是个老生常谈的问题了,本人认为主要还是基本功不扎实导致的,其实只要前后编码一致就可以了,中文乱码问题不外乎以下几种情况:
1、前端页面是正确的中文到了后台就乱码了;
2、后台是正确的中文到前端页面展示时就乱码了;
基于以上两个问题,本人觉得在一个项目开始启动时就要规定是用什么编码:UTF-8,还是GBK,或其他的编码,考虑到统一性,本人建议使用UTF-8。下面就来解决上面遇到的两个乱码问题:
a、在开发工具中把涉及到工程的文件都提前都设置为UTF-8,比如:css、html、jsp、javascript、xml...。
b、前端html页面代码(调用Servlet的doGet方法):index_get.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title>
</head>
<body>
<h1>调用Servlet的GET方法!</h1><br>
<form action="HelloServlet_02" method="get">
名称:<input type="text" name="nameGet"><br><br>
<input type="submit" name="login" value="GET">
</form>
</body>
</html>

c、前端html页面代码(调用Servlet的doPost方法):index_post.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title>
</head>
<body>
<h1>调用Servlet的POST方法!</h1><br>
<form action="HelloServlet_02" method="post">
名称:<input type="text" name="namePost"><br><br>
<input type="submit" name="login" value="POST">
</form>
</body>
</html>

d、后台java代码:
package com.victory.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/HelloServlet_02")
public class HelloServlet_02 extends HttpServlet {
private static final long serialVersionUID = 1L;
   
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("call get method ...");

String name = request.getParameter("nameGet");
name = new String(name.getBytes("ISO-8859-1"),"UTF-8");
System.out.println(name);

response.setContentType("text/html;charset=UTF-8");

    System.out.println("name : "+name);
PrintWriter out = response.getWriter();
   
out.println("<html>");
    out.println("<head>");
    out.println("<title>Hello Servlet</title>");
    out.println("</head>");
    out.println("<body>");
    out.println("<h1> Hello, "+ name +" !</h1>"+"<br>");
    out.println("</body>");
    out.println("</html>");
   
    out.close();
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("call post method ...");

request.setCharacterEncoding("UTF-8");
String name = request.getParameter("namePost");
System.out.println("name : "+name);

response.setContentType("text/html;charset=UTF-8");

PrintWriter out = response.getWriter();
   
out.println("<html>");
    out.println("<head>");
    out.println("<title>Hello Servlet</title>");
    out.println("</head>");
    out.println("<body>");
    out.println("<h1> Hello, "+ name +" !</h1>"+"<br>");
    out.println("</body>");
    out.println("</html>");
   
    out.close();
}

}

从a、b、c、中可以看出前端页面都是使用UTF-8编码,后台最后也都转换成UTF-8,在Servlet中唯一有区别的就是doGet方法和doPost方法在具体处理上有一点点小区别:WEB容器默认是"ISO-8859-1"编码,在doGet方法中就要进行ISO-8859-1编码到UTF-8的转换,而在在doPost方法中你只要设置:request.setCharacterEncoding("UTF-8");就可以了,这个时候有人就会问那我在doGet方法中也设置:request.setCharacterEncoding("UTF-8");不行吗?这个还真不行,至于为什么不行具体还要看WEB容器的实现了,至少Tomcat就不能这么做,不妨大家可以试试。

附件是具体代码,写得简单了一点,希望对大家能有个抛砖引玉的效果,谢谢!
分享到:
评论

相关推荐

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

    ### Java中文乱码问题详解 #### 一、中文问题的来源与背景 计算机技术发展初期,操作系统主要支持单字节的ASCII字符集。随着全球化进程加快和技术进步,为支持多种语言,尤其是双字节编码的语言(如中文),提出了...

    java中文乱码问题

    Java 中文乱码问题详解 Java 中文乱码问题是一个老生常谈的问题,特别是在 Web 应用中。今天,我们将从编码角度分析 Java 编译后在控制台和 Web 等终端显示乱码问题。 一、 Java 处理字符的原理 Java 使用 ...

    java中文乱码问题解决

    "Java中文乱码问题解决" Java中文乱码问题是Java开发中常见的问题,尤其是在Web开发中,乱码问题会导致页面显示混乱,影响用户体验。解决乱码问题需要了解编码的基本原理和各种编码格式的区别。 编码的原因可以...

    java中文乱码问题处理方案.docx

    "java中文乱码问题处理方案" java 中文乱码问题处理方案是 java 开发者经常遇到的问题之一。这个问题的存在是由于 java 系统的中文问题原理没有被正确地理解和解决。只有当我们了解了 java 系统的中文问题原理,...

    Java中文乱码问题研究.pdf

    Java中文乱码问题研究 Java中文乱码问题是Java Web应用程序开发中常见的问题之一。该问题的产生是由于编码不统一,导致中文字符乱码。解决该问题的方法有多种,包括设置页面编码方式、修改Web服务器编码属性、使用...

    java中文乱码解决问题

    JAVA 中文乱码问题是开发过程中常见的问题之一,解决这个问题需要了解乱码产生的原因,然后对症下药。下面我们对容易产生乱码问题的场景进行分析,并提出解决方案。 1. 以 POST 方法提交的表单数据中有中文字符 在...

    java解决中文乱码问题

    Java 解决中文乱码问题 Java 中文乱码问题是中国程序员无法避免的话题。乱码的出现是由于中文和英文的编码格式不同,解码也是不一样的。如果中国的程序员不会遇到乱码,那么只有使用汉语编程。Han语编程是怎么回事...

    java中文乱码大全

    Java中文乱码问题是编程者在开发Java应用程序时经常遇到的问题,尤其是涉及到中文字符处理时。这些问题产生的根本原因在于Java内部采用UNICODE编码,而不同的操作系统和浏览器可能支持不同的编码格式,如Windows中文...

    java中文乱码问题处理集锦

    ### Java中文乱码问题处理集锦 #### 一、引言 在Java开发过程中,中文乱码问题是开发者经常遇到的问题之一。特别是在处理不同编码格式的数据时,如从数据库读取数据、读写文件或者在网络传输过程中,很容易出现中文...

    Java关于中文乱码问题的多种解决方法

    在Java编程中,中文乱码问题是一个常见的困扰,尤其是在处理文件读写、网络传输或数据库操作时。本文将深入探讨几种解决Java中中文乱码问题的方法,并以MyEclipse为开发环境,结合实际示例进行讲解。 1. 文件读写中...

    java中文乱码之解决URL中文乱码问题的方法

    在Java开发中,遇到中文乱码问题是一种常见的挑战,特别是在处理URL时。URL中文乱码问题主要是由于URL编码和解码过程中的不一致导致的。下面将详细介绍如何解决这个问题,并探讨几种常用的方法。 首先,我们需要...

    java中文乱码问题详解.pdf

    解决Java中文乱码问题的常见方法包括: - 设置Java程序启动时的系统属性`file.encoding`,确保与源文件和目标环境的编码一致。 - 使用支持指定编码的I/O流类,如`InputStreamReader`和`OutputStreamWriter`,显式...

    Java中文乱码浅析及解决方案

    综上所述,解决Java中文乱码问题的关键在于确保整个程序的编码一致性,包括源代码、编译器、运行环境、文件读写、网络传输以及数据库操作等环节。通过细心配置和适当地指定编码,我们可以有效地避免乱码问题,确保...

    Java中文乱码解决之道

    阅读许多关于中文乱码的解决办法的博文后,发现对于该问题我们都(更加包括我自己)没有一个清晰明了的认识,于是LZ想通过这系列博文(估计只有几篇)来彻底分析、解决java中文乱码问题,如有错误之处望各位同仁指出...

    JAVA 乱码问题集合

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

    解决Linux操作系统下Java的中文乱码问题

    总结来说,解决Linux下Java中文乱码问题,关键在于确保编码一致性,包括JVM、源代码、文件读写、网络数据以及图形界面的字体设置。同时,使用统一且支持中文的编码,如UTF-8,可以有效避免乱码现象。

    JAVA中文乱码深度分析

    解决Java中文乱码问题通常涉及以下几个方面: - 源代码编码:使用UTF-8编码保存.java文件,避免与系统默认编码冲突。 - 设置`file.encoding`:通过启动参数`-Dfile.encoding=UTF-8`设定JVM的字符编码。 - 流处理:在...

    java获取乱码问题

    ### Java获取乱码问题解析与解决方案 在Java应用开发过程中,字符编码问题一直是困扰开发者的一大难题,尤其是在处理HTTP请求中的中文或特殊字符时,经常会出现乱码现象。本文将详细介绍如何通过修改`server.xml`...

Global site tag (gtag.js) - Google Analytics