小弟被这个问题纠缠了两天,终于见到曙光了。一下方法已经验证没有问题了。在网上查找资料发现有些说Jeode不支持中文,搞得我差点放弃了。现与大家共享。出处http://cnjm.net/bbs/archiver/tid-26379.html
[water]看过王森的PersonalJava程序设计,对其中的中文显示问题一直深感不解,调试书中的例子一直不能正确显示简体中文。今天折腾了一上午,终于搞定了中文显示问题,不敢独享,拿出来和大家分享,希望能对大家有所帮助,这个问题还是很普遍的。
PC测试环境:WindowsXP+SP1简体中文,PJEE3.1(Sun网站上下载的),PJEE安装在D:\pjee3.1。
先设置环境变量,请确保JAVA_HOME变量为空或者是你的PJEE安装路径,在我的系统是JAVA_HOME=d:\pjee3.1,然后重启系统生效。
将简体中文配置文件font.properties.zh(见附件)拷贝到D:\pjee3.1\lib下面,然后按照书中的例子既可正常显示简体中文。
PDA实际测试环境:联想天玑XP100(系统wince3.0又叫PocketPC2002),JeodeVMforIPAQ(Java虚拟机,符合PersonalJava1.2标准,Compaq IPAQ上自带,网上也有下载)
PC与PDA连线,我用的是USB,在PDA上安装好JeodeVM,我采用默认安装,可执行文件和DLL库在\Windows下,Java类库在\windows\lib下。注意,还要将类库i18n_b.jar(一般在C:\Program Files\Insignia Solutions PLC\JeodeForIPAQInstaller下)拷至\windows\lib下,里边含有字符编码转换的类。将\windows\lib\font.properties.zh文件拷贝到PC上,打开编辑(我用系统自带写字板)。
首先,在# name aliases行之前,在字段GB2312_CHARSET(应该有5处)后面都加上,NEED_CONVERTED。如:dialog.1=\u5b8b\u4f53,GB2312_CHARSET改为dialog.1=\u5b8b\u4f53,GB2312_CHARSET,NEED_CONVERTED。
然后,找到# Static FontCharset info.与# Exclusion Range info.之间的部分,按照字体添加各自的类库,如:在fontcharset.dialog.2=com.insignia.io.CE_WingDings行上添加一行fontcharset.dialog.1=com.insignia.io.CE_MS936,注意添加的一行有一些内容与下面两行相同,应该能理解,其他几处(一共五处)也照此办理。存盘,在拷回PDA上\windows\lib下,注意,要删除此目录下面的font.properties.zh_TW,否则还是乱码。好了,搞定。[/water]我的实验环境:
Mysql数据库
JDK1.1.8
从mysql数据库中读出的中文做下面的转化,strName为读出的中文字符串。
strResult=new String(strName.getBytes("ISO-8859-1"),"GB2312");
显示中文正常,大功告成。font.properties.zh文件修改后的内容# @(#)font.properties.zh 1.7 98/01/26
#
# AWT Font default Properties for Chinese Windows 
#dialog.0=Arial,ANSI_CHARSET
dialog.1=\u5b8b\u4f53,GB2312_CHARSET,NEED_CONVERTED
dialog.2=WingDings,SYMBOL_CHARSET,NEED_CONVERTED
dialog.3=Symbol,SYMBOL_CHARSET,NEED_CONVERTEDdialoginput.0=Courier New,ANSI_CHARSET
dialoginput.1=\u5b8b\u4f53,GB2312_CHARSET,NEED_CONVERTED
dialoginput.2=WingDings,SYMBOL_CHARSET,NEED_CONVERTED
dialoginput.3=Symbol,SYMBOL_CHARSET,NEED_CONVERTEDserif.0=Times New Roman,ANSI_CHARSET
serif.1=\u5b8b\u4f53,GB2312_CHARSET,NEED_CONVERTED
serif.2=WingDings,SYMBOL_CHARSET,NEED_CONVERTED
serif.3=Symbol,SYMBOL_CHARSET,NEED_CONVERTEDsansserif.0=Arial,ANSI_CHARSET
sansserif.1=\u5b8b\u4f53,GB2312_CHARSET,NEED_CONVERTED
sansserif.2=WingDings,SYMBOL_CHARSET,NEED_CONVERTED
sansserif.3=Symbol,SYMBOL_CHARSET,NEED_CONVERTEDmonospaced.0=\u5b8b\u4f53,GB2312_CHARSET
monospaced.1=\u5b8b\u4f53,GB2312_CHARSET,NEED_CONVERTED
monospaced.2=WingDings,SYMBOL_CHARSET,NEED_CONVERTED
monospaced.3=Symbol,SYMBOL_CHARSET,NEED_CONVERTED# name aliases
#
# alias.timesroman=serif
# alias.helvetica=sansserif
# alias.courier=monospaced# for backword compatibility
timesroman.0=Times New Roman,ANSI_CHARSET
helvetica.0=Arial,ANSI_CHARSET
courier.0=Courier New,ANSI_CHARSET
zapfdingbats.0=WingDings,SYMBOL_CHARSET# Default font definition
#
default.char=2751# Static FontCharset info.
#
fontcharset.dialog.1=com.insignia.io.CE_MS936
fontcharset.dialog.2=com.insignia.io.CE_WingDings
fontcharset.dialog.3=com.insignia.io.CE_Symbolfontcharset.dialoginput.1=com.insignia.io.CE_MS936
fontcharset.dialoginput.2=com.insignia.io.CE_WingDings
fontcharset.dialoginput.3=com.insignia.io.CE_Symbolfontcharset.serif.1=com.insignia.io.CE_MS936
fontcharset.serif.2=com.insignia.io.CE_WingDings
fontcharset.serif.3=com.insignia.io.CE_Symbolfontcharset.sansserif.1=com.insignia.io.CE_MS936
fontcharset.sansserif.2=com.insignia.io.CE_WingDings
fontcharset.sansserif.3=com.insignia.io.CE_Symbolfontcharset.monospaced.1=com.insignia.io.CE_MS936
fontcharset.monospaced.2=com.insignia.io.CE_WingDings
fontcharset.monospaced.3=com.insignia.io.CE_Symbol# Exclusion Range info.
#
exclusion.dialog.0=0100-f8ffexclusion.dialoginput.0=0100-f8ffexclusion.serif.0=0100-f8ffexclusion.sansserif.0=0100-f8ffexclusion.monospaced.0=0100-f8ff# charset for text input
#
inputtextcharset=GB2312_CHARSET