文选流氓 发表于 2003-2-7 23:54

1-1-16-1-12 后天答辩,HELP,LINUX下JAVA的中文问题?

发信人: dreamonsky (我是一条鱼), 信区: Java      
标题: Re: 后天答辩,HELP,LINUX下JAVA的中文问题?
发信站: BBS 水木清华站 (Sat Jun 22 21:07:47 2002)

详情请查阅linux的精华区


    其实说起来 Java 的中文问题非常简单, 有两个重要因素, 一个是编译时
的编码(encoding), 另一个是字体. 这两个缺一不可.
    一, 编译时的编码: 指的是编译 Java 的源程序时指定的编码格式, 即使用

javac -encoding MyEncoding MyJavaFile.java
   
编译 MyJavaFile 时 -encoding 所指定的 MyEncoding. 通常中文的编码有
大陆和新加坡使用的 GB2312 以及 台湾和香港使用的 Big5, 普通英文用的是
ISO_8859_1. 这里只关注 GB2312. 如果在编译的命令行中指定了编码, 那么就
使用指定的编码格式, 如果没有指定, 将使用系统缺省的编码格式, 在 windows
的中文简体版下都是 GB2312, 而 Linux 下不同的终端可以有不同的编码, 可以
直接设置环境变量 LC_ALL LANG 等指定相应的不同类型信息的编码, 比如数字,
日期, 货币, 姓名等等. 可以用 locale 命令来看当前终端所有的编码. 在
Java 程序中可以使用 System.getProperty("file.encoding"); (注 1) 来获取
当前的编码格式. 好了, 当编译的时候, 源码中的中文字符串都会按照指定的
或者缺省的编码格式映射为相应的 UNICODE , 而不是看做简单的 ASCII 字符.
所以编码格式就是处理源码中的各种各样的字符, 与运行时无关, 所以如果你的
源文件中没有直接需要使用中文的地方, 比如菜单, 按钮, 标签什么的, 就不需
要指定编码了.
    二, 字体的选择: 必须使用能够显示中文的字体, 好象有些废话. 但还是有
必要说一说. AWT 可以在中文系统中直接显示中文, 但是在不是中文系统但是有
中文字体的系统中不能, 需要修改一下 $JAVA_HOME/jre/lib/font.properties,
加入中文字体, 至于怎么加入, 就不谈了. 而 Swing 不需要这样, 只要你的系统
中有中文字体就可以使用这样的字体来显示中文. 怎么知道一种字体能不能显示
中文呢? 看下面的程序片段: (注 2)


      Font[] fonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAl
lFonts();
      System.out.println("Chinese Fonts: \n");
      for (int i = 0; i < fonts.length; i ++)
      {
            if (fonts.canDisplayUpTo("\u4e00") > 0)   // 注 3
            {
                System.out.println(fonts.getFontName());
            }
      }

   
好了, 知道了系统中有没有中文字体, 然后选择一个就是了. 如果选择了不能显示
中文的字体, 通常的情况是显示方框.
页: [1]
查看完整版本: 1-1-16-1-12 后天答辩,HELP,LINUX下JAVA的中文问题?