汉字问题深入谈
2008-01-05 08:15:48 来源:WEB开发网核心提示:一、主题:关于java的中文问题 JAVA的中文问题比较突出,主要表现在控制面板输出,汉字问题深入谈,jsp页面输出和数据库访问上,本文尽量避开字体问题,这个过程总是存在的,只是有的时候用默认的参数进行,而只谈编码,通过本文
一、主题:关于java的中文问题
JAVA的中文问题比较突出,主要表现在控制面板输出,jsp页面输出和数据库访问上。本文尽量避开字体问题,而只谈编码。通过本文,你可以了解JAVA中文问题的由来,问题的解决方法,其中提了一下用JDBC访问数据库的方法。
二、问题描述:
1)在中文W2000中文窗口编译和运行,用的是国际版的JDK,连接的是中文W2000下的Cp936编码的SQL SERVER数据库:
J:exercisedemoencodeHelloWorld>make
Created by XCompiler. PhiloSoft All Rights Reserved.
Wed May 30 02:54:45 CST 2001
J:exercisedemoencodeHelloWorld>run
Created by XRunner. PhiloSoft All Rights Reserved.
Wed May 30 02:51:33 CST 2001
中文
[B@7bc8b569
[B@7b08b569
[B@7860b569
中文
中文
????
中文
中文
????
??
??
??
2)假如在中文W2000的西文窗口(编码为437)下编译,用JAVA运行则由于无字体而无法正常显示,假如象上面一样在中文W2000的中文窗口运行,输出为:
J:exercisedemoencodeHelloWorld>run
Created by XRunner. PhiloSoft All Rights Reserved.
Wed May 30 02:51:33 CST 2001
????
[B@7bc0b66a
[B@7b04b66a
[B@7818b66a
????
????
????
????
????
????
中文
中文
????进入讨论组讨论。
三)分析
1)出现有乱码(也就是?)。由于只出现?而没出现小方框,说明只是编码有问题,而不是字体问题。 在编码中,假如从一种字符集转换到别一种字符集,比较典型的是从GB2312转换到ISO8859_1(即ASCII),那么很多汉字(半个汉字)是无法映射到西文字符中去的,在这种情形下,系统就把这些字符用?代替。同样,也存在小字符集无法到大字符集的情况,具体原因这里就不详谈了。
2)出现了中文环境编译,中文环境运行时汉字显示有正确也有不正确的地方,同样,在西文环境下编译,在中文环境下运行时也出现类似情况。这是由于自动(默认)或手工(也就new String(bytes[,encode])和bytes getBytes([encode]))转码的结果。
2.1)在JAVA源文件-->JAVAC-->Class-->Java-->getBytes()-->new String()-->显示的过程中,每一步都有编码的转换过程,这个过程总是存在的,只是有的时候用默认的参数进行。下面我们一步一步分析为什么出现上面的情形。
2.2)这里是源代码:
HelloWorld.java:
------------------------
public class HelloWorld
{
public static void main(String[] argv)
{
try
{
System.out.PRintln("1:"+"中文");
System.out.println("2:"+"中文".getBytes());
[]
- ››深入理解Android消息处理系统——Looper、Handler...
- ››深入理解SET NAMES和mysql(i)_set_charset的区别
- ››深入理解Mysql字符集设置
- ››深入浅出实战攻防恶意PDF文档
- ››深入剖析防火墙策略的执行过程:ISA2006系列之六
- ››深入JavaScript与.NET Framework中的日期时间(3)...
- ››深入JavaScript与.NET Framework中的日期时间(2)...
- ››深入JavaScript与.NET Framework中的日期时间(1)...
- ››深入理解Javascript闭包
- ››深入学习JavaScript中的函数
- ››深入探讨 Android 传感器
- ››深入CSocket编程之阻塞和非阻塞模式
更多精彩
赞助商链接