MenuItem 显示中文乱码问题的解决方案-阿里云开发者社区

开发者社区> 科技小能手> 正文

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

简介:
+关注继续查看
第一次尝试给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,解决了!

本文转自 Icansoft 51CTO博客,原文链接:http://blog.51cto.com/android/784171

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SSM项目POST中文乱码解决方案
在本地搞了一个SSM的项目练手,修改数据的时候,提交中文数据后居然乱码了。网上一顿狂搜,最终花了几个小时终于解决。 遂加以记录,以便不时之需。 就这么个表单,如果提交中文修改就会乱码,首先确定项目和数据库编码均为UTF-8格式,页面中也有设置编码格式为UTF-8 直接给出解决步骤: 1.
1326 0
AOC显示器 显示“输入不支持” 解决方案
前两天,一朋友碰到一个问题。系统重装后,开机显示器上显示“输入不支持”,且伴随一个框,在跳来跳去,很影响工作! 于是,开始根据错误提示在网上搜索,有的说是驱动问题,于是下载驱动重新安装,但是还是不行。
3035 0
解决sitemesh3装饰页面不能使用freemarker标签问题
如题,这个问题其实在sitemesh2中已经很好的解决了,不过在sitemesh3中可能没有解决,所以要自己写代码解决了,下面我先讲下sitemesh2是如何解决的: sitemesh-freemarker com.
886 0
c# richTextBox显示一个txt文档出现中文乱码
1、参考解决方案 怎么读的呢? 如果是从文本中读的,考虑一下编码问题 FileStream fs = new FileStream(@"c:\你的文本.txt", FileMode.
2036 0
DNN 360 Sidemenu某些Vertical Menu不显示管理菜单的解决办法
在使用http://www.dnn360.net/的Sidemenu时,有一些Vertical Menu无法显示Admin和Host下的子菜单(因为Admin和Host这两个Tab是设置为unable的。
605 0
23706
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载