文选流氓 发表于 2003-5-11 23:03

1-1-16-4-3 Q: 中文显示问题求救.

发信人: KHP (Keen), 信区: Java
标题: Re: Q: 中文显示问题求救.
发信站: BBS 水木清华站 (Sun Mar 26 04:31:10 2000)

【 在 chanyz (chan) 的大作中提到: 】
: 环境:
:         OS: Linux (mdk7.0)
:         jdk: jdk-sbb-1.2.2.RC2-3 (来自TurboLinux6.0)
: 具体情况:
: 1. test code 1:
: ---------------------------------------
: import java.awt.*;
: import java.applet.*;
: public class Applet1 extends Applet {
:   public void paint(Graphics g) {
:         g.drawString("大家好!",68,75);
:   }
: }
: ---------------------------------------
: 编译运行:
: javac Applet1.java(还试过 -encoding iso-8859-1, or, -encoding gbk,都不行)
: appletviewer Applet1.html

用 -encoding gbk 编译出来的 class 文件是对的,你看到的是乱码应该是由于
Xwin 本身没有完全汉化。
注意一下这里汉字编码的转换过程:javac按照gbk编码方式读入你的java源文件,以
Unicode方式保存在内存中,最后按一定的编码方式(UTF-8?)把这个串输出到class
文件中。当 java 读入 class 文件执行时,该中文串在内存中的 Unicode 编码是
没有问题的,因此问题应该是 GUI 系统没有把汉字编码字符正确地显示为汉字。



: 2. test code 2:
: ---------------------------------------
: import java.awt.*;
: import java.applet.*;
: public class Applet1 extends Applet {
:   public void paint(Graphics g) {
:         String s1="我爱你!我爱你!";
:         byte b[] = s1.getBytes("GB2312");
:         String s2 = new String(b,"8859_1");
:         g.drawString(s2, 68,75);
:   }
: }
: -------------------------------------------

: 编译时出错:
: Applet1.java:8: Exception java.io.UnsupportedEncodingException must be caught,
: r it must be declared in the throws clause of this method.
: byte b[] = s1.getBytes("GB2312");
:                     ^
: 1 error
: 问题:
:         我看了BBS上的很多文章, 都说一些不说一些, 实在不懂,
: 麻烦大牛们给菜鸟指路.

try catch 语句是一定要用的,尽管你能保证编码的名称一定没写错,但由于解释器
需要在执行时根据你所给的编码名称调入一个相应的Converter类,如果这个Converter
找不到,就会产生异常。
由于在某些环境下编译时,编译器根据环境变量得到一个缺省的编码方式(非中文系统
通常会是ISO8859_1),并按此读入源程序进行编译。所以有些程序里有这样的语句:

      String s1 = new String(s0.getBytes("ISO8859_1"), "GB2312");

其实对于常数串没必要这么麻烦,只要在编译时向编译器指明编码方式就行了。

--
※ 来源:·BBS 水木清华站 smth.org·
页: [1]
查看完整版本: 1-1-16-4-3 Q: 中文显示问题求救.