大多数程序员在编程中都遇到过Java中文问题,但是只要了解Java系统中文问题的原理,我们就可以和中文问题说拜拜了。最古老的解决方案是使用String字节码转换。这种解决方案的问题是不方便。我们需要打破对象封装并进行字节码转换。另一种方法是对J2EE容器进行编码。如果J2EE应用系统离开容器,就会出现乱码,指定的容器配置不符合J2EE应用与容器分离的原则。在Java内部运算中,所有涉及到的字符串都会转为UTF-8编码进行运算。那么,Java转换之前的字符串是什么字符集呢?Java总是根据操作系统默认的编码字符集来确定字符串的初始编码,Java系统的输入输出采用操作系统默认的编码。因此,如果Java系统的输入、输出和操作系统的编码字符集能够统一,Java系统就能够正确地处理和显示汉字。这是Java系统处理汉字的一个原则,但是在实际项目中,很难正确把握和控制Java系统的输入输出部分。在J2EE中,由于外部浏览器和数据库的介入,中文乱码非常突出。J2EE应用程序在J2EE容器中运行。在本系统中,输入的方式有很多种:一种是封装成请求(request),通过页面形式发送给服务器;第二个是通过数据库读入的;*第一次运行时,总是编译成Servlet,而JSP中往往包含汉字,所以在编译使用javac时,Java会使用默认的操作系统编码作为初始编码。除非另有说明,默认的字符集可以在Jbuilder/eclipse中指定。有几种输出方式:第一种是JSP页面的输出。由于JSP页面已经被编译成Servlet,输出编码也会根据操作系统默认的编码进行选择,除非指定输出编码方式;输出路径为数据库,字符串输出到数据库。从这个角度来看,一个J2EE系统的输入输出是非常复杂和动态的,Java是跨平台运行的。在实际的编译运行中,可能会涉及到不同的操作系统。如果让Java随意运行输入输出的编码字符集是根据操作系统来确定的,就会不受控制的出现乱码。Java是跨平台语言,所以字符集问题必须由具体的系统统一解决,所以在Java应用系统中,解决中文乱码的根本方法是明确规定整个应用系统的统一字符集.
