`
wuhuajun
  • 浏览: 93853 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java中文乱码终结者(转)

    博客分类:
  • java
 
阅读更多

转自:http://blog.csdn.net/kt400_hhx/article/details/1641586

说明:本文为作者原创,作者联系地址为:josserchai@yahoo.com。由于Java编程中的中文问题是一个老生常谈的问题,在阅读了许多关于Java中文问题解决方法之后,结合作者的编程实践,我发现过去谈的许多方法都不能清晰地说明问题及解决问题,尤其是跨平台时的中文问题。于是我给出此篇文章,内容包括对控制台运行的class、Servelets、JSP及EJB类中的中文问题我剖析和建议解决办法。希望大家指教。任何引用本文请注明出处!!

Abstract:本文深入分析了Java程序设计中Java编译器对java源文件和JVM对class类文件的编码/解码过程,通过此过程的解析透视出了Java编程中中文问题产生的根本原因,最后给出了建议的最优化的解决Java中文问题的方法。

1、中文问题的来源 
    计算机最初的操作系统支持的编码是单字节的字符编码,于是,在计算机中一切处理程序最初都是以单字节编码的英文为准进行处理。随着计算机的发展,为了适应世界其它民族的语言(当然包括我们的汉字),人们提出了UNICODE编码,它采用双字节编码,兼容英文字符和其它民族的双字节字符编码,所以,目前,大多数国际性的软件内部均采用UNICODE编码,在软件运行时,它获得本地支持系统(多数时间是操作系统)默认支持的编码格式,然后再将软件内部的UNICODE转化为本地系统默认支持的格式显示出来。Java的JDK和JVM即是如此,我这里说的JDK是指国际版的JDK,我们大多数程序员使用的是国际化的JDK版本,以下所有的JDK均指国际化的JDK版本。我们的汉字是双字节编码语言,为了能让计算机处理中文,我们自己制定的gb2312、GBK、GBK2K等标准以适应计算机处理的需求。所以,大部分的操作系统为了适应我们处理中文的需求,均定制有中文操作系统,它们采用的是GBK,GB2312编码格式以正确显示我们的汉字。如:中文Win2K默认采用的是GBK编码显示,在中文WIN2k中保存文件时默认采用的保存文件的编码格式也是GBK的,即,所有在中文WIN2K中保存的文件它的内部编码默认均采用GBK编码,注意:GBK是在GB2312基础上扩充来的。
    由于Java语言内部采用UNICODE编码,所以在JAVA程序运行时,就存在着一个从UNICODE编码和对应的操作系统及浏览器支持的编码格式转换输入、输出的问题,这个转换过程有着一系列的步骤,如果其中任何一步出错,则显示出来的汉字就会出是乱码,这就是我们常见的JAVA中文问题。
    同时,Java是一个跨平台的编程语言,也即我们编写的程序不仅能在中文windows上运行,也能在中文Linux等系统上运行,同时也要求能在英文等系统上运行(我们经常看到有人把在中文win2k上编写的JAVA程序,移植到英文Linux上运行)。这种移植操作也会带来中文问题。
    还有,有人使用英文的操作系统和英文的IE等浏览器,来运行带中文字符的程序和浏览中文网页,它们本身就不支持中文,也会带来中文问题。
    有,几乎所有的浏览器默认在传递参数时都是以UTF-8编码格式来传递,而不是按中文编码传递,所以,传递中文参数时也会有问题,从而带来乱码现象。
    总之,以上几个方面是JAVA中的中文问题的主要来源,我们把以上原因造成的程序不能正确运行而产生的问题称作:JAVA中文问题。
2、JAVA编码转换的详细过程 
    我们常见的JAVA程序包括以下类别:
     *直接在console上运行的类(包括可视化界面的类)
     *JSP代码类(注:JSP是Servlets类的变型)
     *Servelets类
     *EJB类
     *其它不可以直接运行的支持类
    这些类文件中,都有可能含有中文字符串,并且我们常用前三类JAVA程序和用户直接交互,用于输出和输入字符,如:我们在JSP和Servlet中得到客户端送来的字符,这些字符也包括中文字符。无论这些JAVA类的作用如何,这些JAVA程序的生命周期都是这样的:
    *编程人员在一定的操作系统上选择一个合适的编辑软件来实现源程序代码并以.java扩展名保存在操作系统中,例如我们在中文win2k中用记事本编辑一个java源程序;
     *编程人员用JDK中的javac.exe来编译这些源代码,形成.class类(JSP文件是由容器调用JDK来编译的);
     *直接运行这些类或将这些类布署到WEB容器中去运行,并输出结果。
    那么,在这些过程中,JDK和JVM是如何将这些文件如何编码和解码并运行的呢?
    这里,我们以中文win2k操作系统为例说明JAVA类是如何来编码和被解码的。
    第一步,我们在中文win2k中用编辑软件如记事本编写一个Java源程序文件(包括以上五类JAVA程序),程序文件在保存时默认采用了操作系统默认支持GBK编码格式(操作系统默认支持的格式为file.encoding格式)形成了一个.java文件,也即,java程序在被编译前,我们的JAVA源程序文件是采用操作系统默认支持的file.encoding编码格式保存的,java源程序中含有中文信息字符和英文程序代码;要查看系统的file.encoding参数,可以用以下代码:
public class ShowSystemDefaultEncoding {
public static void main(String[] args) {
String encoding = System.getProperty("file.encoding");
System.out.println(encoding);
}}
    第二步,我们用JDK的javac.exe文件编译我们的Java源程序,由于JDK是国际版的,在编译的时候,如果我们没有用-encoding参数指定我们的JAVA源程序的编码格式,则javac.exe首先获得我们操作系统默认采用的编码格式,也即在编译java程序时,若我们不指定源程序文件的编码格式,JDK首先获得操作系统的file.encoding参数(它保存的就是操作系统默认的编码格式,如WIN2k,它的值为GBK),然后JDK就把我们的java源程序从file.encoding编码格式转化为JAVA内部默认的UNICODE格式放入内存中。然后,javac把转换后的unicode格式的文件进行编译成.class类文件,此时.class文件是UNICODE编码的,它暂放在内存中,紧接着,JDK将此以UNICODE编码的编译后的class文件保存到我们的操作系统中形成我们见到的.class文件。对我们来说,我们最终获得的.class文件是内容以UNICODE编码格式保存的类文件,它内部包含我们源程序中的中文字符串,只不过此时它己经由file.encoding格式转化为UNICODE格式了。
    这一步中,对于JSP源程序文件是不同的,对于JSP,这个过程是这样的:即WEB容器调用JSP编译器,JSP编译器先查看JSP文件中是否设置有文件编码格式,如果JSP文件中没有设置JSP文件的编码格式,则JSP编译器调用JDK先把JSP文件用JVM默认的字符编码格式(也即WEB容器所在的操作系统的默认的file.encoding)转化为临时的Servlet类,然后再把它编译成UNICODE格式的class类,并保存在临时文件夹中。如:在中文win2k上,WEB容器就把JSP文件从GBK编码格式转化为UNICODE格式,然后编译成临时保存的Servlet类,以响应用户的请求。
    第三步,运行第二步编译出来的类,分为三种情况:
    A、 直接在console上运行的类
    B、 EJB类和不可以直接运行的支持类(如JavaBean类)
    C、 JSP代码和Servlet类
    D、 JAVA程序和数据库之间
    下面我们分这四种情况来看。
    A、直接在console上运行的类
    这种情况,运行该类首先需要JVM支持,即操作系统中必须安装有JRE。运行过程是这样的:首先java启动JVM,此时JVM读出操作系统中保存的class文件并把内容读入内存中,此时内存中为UNICODE格式的class类,然后JVM运行它,如果此时此类需要接收用户输入,则类会默认用file.encoding编码格式对用户输入的串进行编码并转化为unicode保存入内存(用户可以设置输入流的编码格式)。程序运行后,产生的字符串(UNICODE编码的)再回交给JVM,最后JRE把此字符串再转化为file.encoding格式(用户可以设置输出流的编码格式)传递给操作系统显示接口并输出到界面上。
    对于这种直接在console上运行的类,它的转化过程可用图1更加明确的表示出来:

图1
    以上每一步的转化都需要正确的编码格式转化,才能最终不出现乱码现象。
    B、EJB类和不可以直接运行的支持类(如JavaBean类)
    由于EJB类和不可以直接运行的支持类,它们一般不与用户直接交互输入和输出,它们常常与其它的类进行交互输入和输出,所以它们在第二步被编译后,就形成了内容是UNICODE编码的类保存在操作系统中了,以后只要它与其它的类之间的交互在参数传递过程中没有丢失,则它就会正确的运行。
这种EJB类和不可以直接运行的支持类, 它的转化过程可用图2更加明确的表示出来:

图2
    C、JSP代码和Servlet类
    经过第二步后,JSP文件也被转化为Servlets类文件,只不过它不像标准的Servlets一校存在于classes目录中,它存在于WEB容器的临时目录中,故这一步中我们也把它做为Servlets来看。
    对于Servlets,客户端请求它时,WEB容器调用它的JVM来运行Servlet,首先,JVM把Servlet的class类从系统中读出并装入内存中,内存中是以UNICODE编码的Servlet类的代码,然后JVM在内存中运行该Servlet类,如果Servlet在运行的过程中,需要接受从客户端传来的字符如:表单输入的值和URL中传入的值,此时如果程序中没有设定接受参数时采用的编码格式,则WEB容器会默认采用ISO-8859-1编码格式来接受传入的值并在JVM中转化为UNICODE格式的保存在WEB容器的内存中。Servlet运行后生成输出,输出的字符串是UNICODE格式的,紧接着,容器将Servlet运行产生的UNICODE格式的串(如html语法,用户输出的串等)直接发送到客户端浏览器上并输出给用户,如果此时指定了发送时输出的编码格式,则按指定的编码格式输出到浏览器上,如果没有指定,则默认按ISO-8859-1编码发送到客户的浏览器上。这种JSP代码和Servlet类,它的转化过程可用图3更加明确地表示出来:

图3
    D、Java程序和数据库之间
    对于几乎所有数据库的JDBC驱动程序,默认的在JAVA程序和数据库之间传递数据都是以ISO-8859-1为默认编码格式的,所以,我们的程序在向数据库内存储包含中文的数据时,JDBC首先是把程序内部的UNICODE编码格式的数据转化为ISO-8859-1的格式,然后传递到数据库中,在数据库保存数据时,它默认即以ISO-8859-1保存,所以,这是为什么我们常常在数据库中读出的中文数据是乱码。
    对于JAVA程序和数据库之间的数据传递,我们可以用图4清晰地表示出来

图4
    3、分析常见的JAVA中文问题几个必须清楚的原则
    首先,经过上面的详细分析,我们可以清晰地看到,任何JAVA程序的生命期中,其编码转换的关键过程是在于:最初编译成class文件的转码和最终向用户输出的转码过程。
    其次,我们必须了解JAVA在编译时支持的、常用的编码格式有以下几种:
    *ISO-8859-1,8-bit, 同8859_1,ISO-8859-1,ISO_8859_1等编码
    *Cp1252,美国英语编码,同ANSI标准编码
    *UTF-8,同unicode编码
    *GB2312,同gb2312-80,gb2312-1980等编码
    *GBK , 同MS936,它是gb2312的扩充
    及其它的编码,如韩文、日文、繁体中文等。同时,我们要注意这些编码间的兼容关体系如下:
    unicode和UTF-8编码是一一对应的关系。GB2312可以认为是GBK的子集,即GBK编码是在gb2312上扩展来的。同时,GBK编码包含了20902个汉字,编码范围为:0x8140-0xfefe,所有的字符可以一一对应到UNICODE2.0中来。
    再次,对于放在操作系统中的.java源程序文件,在编译时,我们可以指定它内容的编码格式,具体来说用-encoding来指定。注意:如果源程序中含有中文字符,而你用-encoding指定为其它的编码字符,显然是要出错的。用-encoding指定源文件的编码方式为GBK或gb2312,无论我们在什么系统上编译含有中文字符的JAVA源程序都不会有问题,它都会正确地将中文转化为UNICODE存储在class文件中。
    
然后,我们必须清楚,几乎所有的WEB容器在其内部默认的字符编码格式都是以ISO-8859-1为默认值的,同时,几乎所有的浏览器在传递参数时都是默认以UTF-8的方式来传递参数的。所以,虽然我们的Java源文件在出入口的地方指定了正确的编码方式,但其在容器内部运行时还是以ISO-8859-1来处理的。

 

 

4、中文问题的分类及其建议最优解决办法
    了解以上JAVA处理文件的原理之后,我们就可以提出了一套建议最优的解决汉字问题的
办法。
    我们的目标是:我们在中文系统中编辑的含有中文字符串或进行中文处理的JAVA源程序
经编译后可以移值到任何其它的操作系统中正确运行,或拿到其它操作系统中编译后能正确运行,能正确地传递中文和英文参数,能正确地和数据库交流中英文字符串。
    我们的具体思路是:在JAVA程序转码的入口和出口及JAVA程序同用户有输入输出转换的地方限制编码方法使之正确即可。
    具体解决办法如下:
    1、 针对直接在console上运行的类
    对于这种情况,我们建议在程序编写时,如果需要从用户端接收用户的可能含有中文的
输入或含有中文的输出,程序中应该采用字符流来处理输入和输出,具体来说,应用以下面向字符型节点流类型:
    对文件:FileReader,FileWrieter
        其字节型节点流类型为:FileInputStream,FileOutputStream
    对内存(数组):CharArrayReader,CharArrayWriter
        其字节型节点流类型为:ByteArrayInputStream,ByteArrayOutputStream
    对内存(字符串):StringReader,StringWriter
    对管道:PipedReader,PipedWriter
        其字节型节点流类型为:PipedInputStream,PipedOutputStream
    同时,应该用以下面向字符型处理流来处理输入和输出:
    BufferedWriter,BufferedReader
        其字节型的处理流为:BufferedInputeStream,BufferedOutputStream
    InputStreamReader,OutputStreamWriter
    其字节型的处理流为:DataInputStream,DataOutputStream
    其中InputStreamReader和InputStreamWriter用于将字节流按照指定的字符编码集转换
到字符流,如:
    InputStreamReader in = new InputStreamReader(System.in,"GB2312");
    OutputStreamWriter out = new OutputStreamWriter (System.out,"GB2312");
    例如:采用如下的示例JAVA编码就达到了要求:
//Read.java
import java.io.*;
public class Read {
public static void main(String[] args) throws IOException {
String str = "/n中文测试,这是内部硬编码的串"+"/ntest english character";
String strin= "";
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in,"gb23
12")); //设置输入接口按中文编码
BufferedWriter stdout = new BufferedWriter(new OutputStreamWriter(System.out,"g
b2312")); //设置输出接口按中文编码
stdout.write("请输入:");
stdout.flush();
strin = stdin.readLine();
stdout.write("这是从用户输入的串:"+strin);
stdout.write(str);
stdout.flush();
}}
    同时,在编译程序时,我们用以下方式来进行:
    javac -encoding gb2312 Read.java
    其运行结果如图5所示:

    图5
    2、 针对EJB类和不可以直接运行的支持类(如JavaBean类)
    由于这种类它们本身被其它的类调用,不直接与用户交互,故对这种类来说,我们的建
议的处理方式是内部程序中应该采用字符流来处理程序内部的中文字符串(具体如上面一节中一样),同时,在编译类时用-encoding gb2312参数指示源文件是中文格式编码的即可。
    3、 针对Servlet类
    针对Servlet,我们建议用以下方法:
    在编译Servlet类的源程序时,用-encoding指定编码为GBK或GB2312,且在向用户输出
时的编码部分用response对象的setContentType("text/html;charset=GBK");或gb2312来设
置输出编码格式,同样在接收用户输入时,我们用request.setCharacterEncoding("GB231
2");这样无论我们的servlet类移植到什么操作系统中,只有客户端的浏览器支持中文显示
,就可以正确显示。如下是一个正确的示例:
//HelloWorld.java
package hello;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet
{
public void init() throws ServletException { }
public void doGet(HttpServletRequest request, HttpServletResponse response) thr
ows IOException, ServletException
{
request.setCharacterEncoding("GB2312"); //设置输入编码格式
response.setContentType("text/html;charset=GB2312"); //设置输出编码格式
PrintWriter out = response.getWriter(); //建议使用PrintWriter输出
out.println("<hr>");
out.println("Hello World! This is created by Servlet!测试中文!");
out.println("<hr>");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) th
rows IOException, ServletException
{
request.setCharacterEncoding("GB2312"); //设置输入编码格式
response.setContentType("text/html;charset=GB2312"); //设置输出编码格式
String name = request.getParameter("name");
String id = request.getParameter("id");
if(name==null) name="";
if(id==null) id="";
PrintWriter out = response.getWriter(); //建议使用PrintWriter输出
out.println("<hr>");
out.println("你传入的中文字串是:" + name);
out.println("<hr>你输入的id是:" + id);
out.println("<hr>");
}
public void destroy() { }
}
    请用javac -encoding gb2312 HelloWorld.java来编译此程序。
    测试此Servlet的程序如下所示:
<%@page contentType="text/html; charset=gb2312"%>
<%request.setCharacterEncoding("GB2312");%>
<html><head><title></title>
<Script language="JavaScript">
function Submit() {
//通过URL传递中文字符串值给Servlet
document.base.action = "./HelloWorld?name=中文";
document.base.method = "POST";
document.base.submit();
}
</Script>
</head>
<body bgcolor="#FFFFFF" text="#000000" topmargin="5">
<form name="base" method = "POST" target="_self">
<input name="id" type="text" value="" size="30">
<a href = "JavaScript:Submit()">传给Servlet</a>
</form></body></html>
    其运行结果如图6所示:

    图6
    4、 JAVA程序和数据库之间
    为避免JAVA程序和数据库之间数据传递出现乱码现象,我们建议采用以下最优方法来处
理:
    1、 对于JAVA程序的处理方法按我们指定的方法处理。
    2、 把数据库默认支持的编码格式改为GBK或GB2312的。
    如:在mysql中,我们可以在配置文件my.ini中加入以下语句实现:
    在[mysqld]区增加:
    default-character-set=gbk
    并增加:
    [client]
    default-character-set=gbk
    在SQL Server2K中,我们可以将数据库默认的语言设置为Simplified Chinese来达到目
的。
    5、 针对JSP代码
    由于JSP是在运行时,由WEB容器进行动态编译的,如果我们没有指定JSP源文件的编码
格式,则JSP编译器会获得服务器操作系统的file.encoding值来对JSP文件编译的,它在移
植时最容易出问题,如在中文win2k中可以很好运行的jsp文件拿到英文linux中就不行,尽
管客户端都是一样的,那是因为容器在编译JSP文件时获取的操作系统的编码不同造成的(
在中文wink中的file.encoding和在英文Linux中file.encoding是不同的,且英文Linux的f
ile.encoding对中文不支持,所以编译出来的JSP类就会有问题)。网络上讨论的大多数是
此类问题,多是因为JSP文件移植平台时不能正确显示的问题,对于这类问题,我们了解了
JAVA中程序编码转换的原理,解决起来就容易多了。我们建议的解决办法如下:
    1、我们要保证JSP向客户端输出时是采用中文编码方式输出的,即无论如何我们首先在
我们的JSP源代编中加入以下一行:
    <%@page contentType="text/html; charset=gb2312"%>
    2、为了让JSP能正确获得传入的参数,我们在JSP源文件头加入下面一句:
    <%request.setCharacterEncoding("GB2312");%>
    3、为了让JSP编译器能正确地解码我们的含有中文字符的JSP文件,我们需要在JSP源文
件中指定我们的JSP源文件的编码格式,具体来说,我们在JSP源文件头上加入下面的一句即可:
    <%@page pageEncoding="GB2312"%>或<%@page pageEncoding="GBK"%>
    这是JSP规范2.0新增加的指令。
    我们建议使用此方法来解JSP文件中的中文问题,下面的代码是一个正确做法的JSP文件
的测试程序:
//testchinese.jsp
<%@page pageEncoding="GB2312"%>
<%@page contentType="text/html; charset=gb2312"%>
<%request.setCharacterEncoding("GB2312");%>
<%
String action = request.getParameter("ACTION");
String name = "";
String str = "";
if(action!=null && action.equals("SENT"))
{
name = request.getParameter("name");
str = request.getParameter("str");
}
%>
<html>
<head>
<title></title>
<Script language="JavaScript">
function Submit()
{
document.base.action = "?ACTION=SENT&str=传入的中文";
document.base.method = "POST";
document.base.submit();
}
</Script>
</head>
<body bgcolor="#FFFFFF" text="#000000" topmargin="5">
<form name="base" method = "POST" target="_self">
<input type="text" name="name" value="" size="30">
<a href = "JavaScript:Submit()">提交</a>
</form>
<%
if(action!=null && action.equals("SENT"))
{
out.println("<br>你输入的字符为:"+name);
out.println("<br>你通过URL传入的字符为:"+str);
}
%>
</body>
</html>
    如图7是此程序运行的结果示意图:

    图7
    5、总结
 解决中文乱码问题:
eclispe设置:


 

 
jsp设置:
1.对于同一个应用,最好统一编码,推荐为UTF-8,当然GBK也可以。

2.正确设置JSP的pageEncoding参数 保证jsp编译器能按照正确的编码方式读取。

3.在所有的JSP/Servlet中设置contentType="text/html;charset=UTF-8"或response.setCharacterEncoding("UTF-8"),从而间接实现对浏览器编码的设置。
这时候页面到了浏览器端,IIE的菜单中选择"查看(V)"à"编码(D)" 就能看到你设置过去的编码了。

4.对于请求,可以使用过滤器或者在每个JSP/Servlet中设置request.setCharacterEncoding("UTF-8")。同时,要修改Tomcat的默认配置,推荐将useBodyEncodingForURI参数设置为true,也可以将URIEncoding参数设置为 UTF-8(有可能影响其他应用,所以不推荐)。
为什么一定要设置成utf-8不使用容器默认的ISO-8859-1,很简单因为这种编码不支持中文。
数据库设置:
 同上默认是ISO-8859-1 所以要把数据库编码和jdbc连接器编码都设置成能支持中文的才可以。
jdbc连接器一般在配置url里面设置就ok了 eg:
jdbc:mysql://localhost:3306/test?user=root&amp;amp;password=&amp;amp;useUnicode=true&characterEncoding=utf8
  • 大小: 13.2 KB
  • 大小: 13.5 KB
分享到:
评论

相关推荐

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

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

    java中文乱码解决问题

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

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

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

    [Java]PDF转图片解决中文乱码.zip

    总之,这个名为"PDF2img"的DEMO利用PDFBox库解决了在Java环境中PDF转图片时中文乱码的问题,对于需要处理大量中文PDF文档的开发者来说,这是一个非常实用的工具。通过深入理解和使用PDFBox,我们可以构建更复杂的...

    java中文乱码大全

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

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

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

    java中文乱码问题

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

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

    Java 中文乱码问题是一个常见的编程困扰,尤其对于处理中文字符的Java程序而言。这个问题通常源于字符编码的不一致,即不同环节采用的字符编码标准不统一。本文将深入探讨这一问题,并提供相应的解决方案。 首先,...

    java 中文乱码 处理

    ### Java中文乱码处理 在Java开发过程中,中文乱码问题常常令人头疼,尤其是在Web应用中,客户端提交的数据经常会出现编码不一致导致的乱码问题。本文将介绍几种解决Java中中文乱码的方法,希望能对您有所帮助。 #...

    java汉字乱码终极解决代码

    开发中前台页面向后台传参,汉字乱码,看了好多网上的方法都解决不了,所以写了一个工具类,判断是乱码就转换,不乱码就不乱换,汉字字母符号自动判断。最后完美解决汉字乱码问题。

    java解决中文乱码问题

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

    Java生成pdf文件,解决中文乱码问题.pdf

    Java 生成 PDF 文件,解决中文乱码问题 Java 生成 PDF 文件,解决中文乱码问题是 Java 编程中常见的问题。解决这个问题的关键是正确地设置中文字体,以避免乱码问题。本文将通过一个完整的示例代码,详细讲解如何...

    JAVA中文乱码深度分析

    Java使用Unicode作为内部编码,这允许其跨平台兼容性,但同时也引出了中文乱码的问题。当Java程序在不同的操作系统或浏览器上运行时,如果没有正确处理编码转换,就可能导致乱码。 1. 中文问题的来源: - Unicode...

    Java 中文乱码问题

    在Java编程中,中文乱码问题是一个常见的困扰开发者的问题,特别是在处理输入输出或者网络通信时。这个问题涉及到字符编码的理解和正确使用。以下是对这个主题的详细解析: 首先,我们需要了解字符编码的基础知识。...

    Java中文乱码解决之道

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

    java中文乱码问题解决

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

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

    因此,如果能统一 java 系统的输入、输出和操作系统 3 者的编码字符集合,将能够使 java 系统正确处理和显示汉字。 解决 java 中文乱码问题的方法有多种。最古老的解决方案是使用 String 的字节码转换,这种方案的...

    java zip解压中文乱码问题

    网上很多描述java解压中文乱码的问题,很多描述不全.由于工作需要整理出一个完整版.简单实用.下载后请从ZipUtil.java的main方法开始,一目了然. public static void main(String args[]) { new ZipUtil().unZip("E:\\...

    java aspose word 上传到服务器 导出的word 中文字体乱码 的问题 java aspose

    java aspose word 上传到服务器 导出的word 中文字体乱码 的问题 java aspose java aspose word 上传到服务器 导出的word 中文字体乱码 的问题 java aspose java aspose word 上传到服务器 导出的word 中文字体乱码 ...

Global site tag (gtag.js) - Google Analytics