写在前面的话:
Java中文问题一直是困饶着初学java的主要问题,而且即使接触java有一段时间的“老手”也经常会在java的中文问题上栽跟头。下面就我个人理解,对Java中文问题进行一些阐释。
理解Java内部关于编码的原理:
Java内部是Unicode编码,所谓Unicode编码即是:全世界所有符号进行了统一编码的结果。但是有一点值得提出一下,用它来处理汉字是合适的,但是英文却吃亏了,要用多一倍的空间来存储。所以程序员们写的程序不支持UNICODE情况很常见。
其他相关编码方式还有(说一些和中文相关的大家也许经常见到的编码方式):GB2312和GBK。其中GB2312是对GBK的升级,GBK是GB2312的一个子集,例如GB2312可以支持繁体字。BIG5是台湾编码方式。ISO8859-1编码:ISO8859_1,这个是英文系统缺省的8bit编码,因为是8bit的,所以不会把汉字的高位删去,所以用它也是可以处理汉字的。
理解Java的IO机制:
Java的IO基类分为:InputStream、OutputStream和Reader、Writer
在I/O时如果使用Reader/Writer就要发生编码转换,使用系统属性file.encoding作为编码方式。如果使用Stream就没有转换的事情了,那是Binary的数据。
1、在Reader/Writer上加encoding的选项时候,在Reader中的encoding表示把数据从encoding转换成Unicode,writer就是把Unicode的字符转换成encoding格式的。
2、用String.getByte()把字符串转换成指定编码。
JSP/Servlet问题:
JSP/Servlet的中文问题有两种解决办法:
1、 不在程序中进行编码转换,把这个工作交给浏览器,方法就是用javac –encoding GBK *.java来编译所有的bean,然后在JSP页面上加
<%@ page contentType="text/html;charset=gb2312" %>或者是在HTML中直接加: <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
到底加那个,试试就知道了。
2、 在程序中指定编码,用javac –encoding ISO8859_1 *.java来编译所有的bean,在涉及到中文显示的程序上加
str=new String(str.getBytes("ISO8859_1"));
上面两种方法不能混用,意思就是要么就是GBK,要么就是ISO8859_1,从里到外都一样就好了。
另外一个好办法就是采用filter:
import javax.servlet.*;
import java.io.*;
public class RequestEncodeFilter implements Filter {
String charset = null;
public void init(FilterConfig config) throws ServletException {
charset = config.getInitParameter("charset");
if (charset == null)
charset = "GBK";
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException,
ServletException {
request.setCharacterEncoding(charset);
chain.doFilter(request, response);
}
public void destroy() {
}
}
在你的web.xml配置好fillter就可以了。这个方法是最便捷的,基本可以实现让java程序员原理中文问题。
数据库JDBC的中文问题:
一般只要按照数据库指定的编码进行转换,比如按照ISO8859_1读,ISO8859_1写,一般就没什么问题了。我也碰到过一些例外情况,如:对于存储的代码不进行转码机制,在数据库中存储的是乱码。但是,读取的时候却是正常的中文。我想这正好是Unicodeà特定coding—>Unicode编码,所以凑巧碰上了吧,我想数据库内部处理过程在起作用吧,当然我们谁也不喜欢一打开数据库看到的是一堆乱码。那就还是按照自己指定的方式来进行转码解码吧。
另外一种办法是:在JDBC连接数据库过程就进行字符编码转换:
如:ConnectionString="jdbc:mysql://localhost/dbname?user=root&password=dphw&useUnicode=true&characterEncoding=8859_1(mysql的例子)
java和javaw:
他们的区别就不多说了,主要是java会在黑窗口下进行,而javaw不会,所以例如jb这样的开发工具都是默认采用javaw来进行run这些java的class的。
但是有一点需要提出的是:
javaw会使用与java不同的Local配置进行工作,导致了一些中文问题,而java就是好好的。JBuilder也是好好的,没有问题,调用javaw也不是它的错,难道你想每次运行或者调试的时候蹦出个DOS黑框么?
可以采用如下办法解决jb中的javaw造成的中文问题。
在JBuilder中选择Project->Project Properties->run->edit->VM Parameters,填上-Dfile.encoding=GBK -Ddefault.client.encoding=GBK -Duser.language=zh -Duser.region=CN 就行了!
原理也就是在javaw加上如上的配置参数。
其他配置方面:
在JDK低版本和UNIX下,需要改动font.properties,让JAVA VM能够找到合适的字体来显示汉字。
总结:
上面就我所接触的几个方面谈谈java的中文问题。其中包括理解Java内部关于编码的原理、理解Java的IO机制、JSP/Servlet问题、 数据库JDBC的中文问题、java和javaw、其他配置方面。
肯定会有许多疏漏的地方,希望各位给予补充。
<chsdate w:st="on" year="2005" month="5" day="4" islunardate="False" isrocdate="False"></chsdate>05年5月4日
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=372142
相关推荐
由于Java编程中的中文问题是一个老生常谈的问题,在阅读了许多关于Java中文问题解决方法之后,结合作者的编程实践,我发现过去谈的许多方法都不能清晰地说明问题及解决问题,尤其是跨平台时的中文问题。于是我给出此...
### JAVA中文问题解析和最优解决办法 #### 一、引言 随着信息技术的快速发展与全球化进程的加速,软件开发越来越需要支持多语言环境,特别是中文环境。Java作为一门跨平台的编程语言,广泛应用于Web应用、企业级...
对于`java汉字问题.txt`这个文件,你可以尝试按照上述方法检查和调整其编码,以解决乱码问题。 总的来说,理解字符编码机制,正确配置Java程序和相关环境的编码设置,是解决汉字乱码问题的关键。希望本文提供的方案...
Java 中文问题主要源于字符编码的不匹配,这在编程、编译和运行阶段都可能出现。Java 语言内部使用 Unicode 编码,而操作系统、文本编辑器、浏览器及其他应用程序可能使用不同的编码方式,如GBK、GB2312等。当这些...
### Java中文乱码问题详解 #### 一、中文问题的来源与背景 计算机技术发展初期,操作系统主要支持单字节的ASCII字符集。随着全球化进程加快和技术进步,为支持多种语言,尤其是双字节编码的语言(如中文),提出了...
23种设计模式 GoF设计模式 SQL Server死锁 UML2.0建模 JavaUtil包使用 Java中文问题全面解析 SWT JFace全面接触 Eclipse插件开发 Java5年经典文章 Java核心技术之线程 软件工程 人月神话 Java模板引擎
### Java中文问题详解 在Java开发过程中,处理中文字符经常会出现各种编码问题,尤其是在早期的Web应用中。本文将从几个方面深入探讨Java中的中文处理技术,并为开发者提供一些实用的解决方案。 #### 1. Unicode与...
Java编程中的中文问题源于字符编码的不匹配,主要体现在以下几个方面: 1. **操作系统与Java的编码差异**:早期的计算机系统多采用单字节编码,如ASCII,但随着Unicode的普及,Java语言内部使用Unicode编码,以支持...
本文深入剖析了Java中文问题的根源,并提供了相应的解决方案。 一、问题的由来 早期的计算机系统主要支持单字节编码的英文字符,但随着多语言需求的增加,Unicode编码应运而生,它能兼容英文和其他多字节字符,如...
在Java编程语言中,对包含中文、数字和字母的数据进行排序是一项常见的任务。这个场景下,我们关注的是如何实现一个自定义的排序规则,按照数字、字母和汉字的顺序进行排列。以下是对这一主题的详细解释。 首先,...
语言程序设计资料:Java中文问题参考.doc
在Java编程中,处理中文路径问题是一个常见的挑战,尤其是在Windows操作系统环境下。中文字符在路径中可能会引起编码问题,导致程序无法正确读取或写入文件。这个问题主要涉及到字符编码、文件I/O操作以及系统环境的...
解决Java中文乱码问题的核心在于:确保每个环节的编码一致,从源代码到最终显示的所有过程都应采用相同的字符编码标准。在实践中,推荐使用UTF-8编码,因为它具有广泛的支持和兼容性。 在实际项目中,当遇到乱码...
java 中文字转为英文java 中文字转为英文java 中文字转为英文
java常见问题的pdf版本
java中文编码的原理到解决方案
java aspose word 上传到服务器 导出的word 中文字体乱码 的问题 java aspose java aspose word 上传到服务器 导出的word 中文字体乱码 的问题 java aspose java aspose word 上传到服务器 导出的word 中文字体乱码 ...