MenuItem 显示中文乱码问题的解决方案

关注微信号:javalearns   随时随地学Java

或扫一扫

随时随地学Java

第一次尝试给java程序添加系统托盘图标(TrayIcon),发现菜单显示中文为乱码,一个个小方框,后来在网上找到一位网友的文章《MenuItem 显示中文乱码问题解决方案》,按照里面的思路解决了。


引用文章里“问题的原因”:
1. 本地系统区域语言字符集的问题,我们的系统可能默认的字符集为GB2312或GBK。
 
2. Java源文件编码字符的问题,如果使用eclipse可以查看一下java source文件的编码方式。
 
3. javac编译时的字符问题,这一个问题很容易被忽略,运行一下javac可以看到有一个encoding的参数可以设置----这一个很重要。
 
4. 要读取文件的编码和读取时的字符集设置问题,如果我们要用的字符串不是硬编码在java源码中,而是从资源文件中读取时,就要注意这个问题了。

解决方法呢:
第一种情况,本地系统的语言字符,我们管不了;

第二种情况,转换一下文件的编码就好了;

第三种情况,当我们检查确定Java源文件编码字符是UTF-8,对javac编译时的参数设置,增加encoding参数,如:javac -encoding utf8 Test.java
    但在Eclipse没找到相关的设置,只好有以下方法:
    1.手工编译使用到MenuItem的类,目前只发现java.awt包会存在这个问题,swing包能很好的解决这种字符集变换的问题。

    2.使用其它编译方式,如ant、Maven,它们都能配置javac。先给出网友文章给出的Maven例子:
< build >    
         < plugins >    
                 < plugin >    
                         < groupId >org.apache.maven.plugins </ groupId >    
                         < artifactId >maven-compiler-plugin </ artifactId >    
                         < version >2.3.2 </ version >    
                         < configuration >    
                                 < source >1.6 </ source >    
                                 < target >1.6 </ target >    
                                 < encoding >utf8 </ encoding >    
                         </ configuration >    
                 </ plugin >    
                                            ....

而我用Ant的:
< target  name ="compile"  depends ="copyfiles" > 
         < javac  srcdir ="${sourcedir}" 
                      destdir ="${targetdir}" 
                      encoding ="UTF-8" 
                      target ="1.6"
                      classpathref ="libraries"  />
</ target >

4. 要读取的文件的字符编码和读取流编码,对一个资源文件,我们也要设置其编码为utf8(参照第2条,跟设置java源文件编码是一样的),同时在使用流读取时也要设置流的读取编码(这个网上说java字符流的默认的是jvm的编码,跟系统字符集一致)。

读取流代码如下:
BufferedReader br =  new BufferedReader( new InputStreamReader( new FileInputStream(langFile),  "utf8"));

这里还要注意的是:在复制这个资源文件时,最好也设置一下编码,如用ant复制时:
< echo  message ="copy conf" />    
< copy  file ="D:\klaudisk-client\conf\settings.ini"    
         tofile ="D:\klaudisk-client\target\conf\settings.ini"  overwrite ="true"  encoding ="utf8" />

还可以使用Properties.load()方法来加载.properties文件(该文件是被java bin下的navie2asc程序处理过的文件),这样就不用管第4点问题了。

我的问题是第3种情况,使用Ant来编译生成jar,解决了!

关注微信号:javalearns   随时随地学Java

或扫一扫

随时随地学Java


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值