日期:2014-05-20  浏览次数:20774 次

java中文乱码问题
中文文字、java代码、工程均使用UTF-8编码,在Myeclipse控制台中中文显示正常,但是打包后执行则是乱码。。不清楚为什么。。谢谢。

java代码:
Java code

public class EncodingTest {
    protected static Logger logger = Logger.getLogger(EncodingTest.class.getName());
    /**
     * @param args
     */
    public static void main(String[] args) {
        try {
        String str=new String(("你好").getBytes(),"UTF-8");
        logger.info(str);
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    }

}





Myeclipse控制台中:



打包后执行:


------解决方案--------------------
TOMCAT也要设置为UTF-8
------解决方案--------------------
所有用到的地方,全用uft-8
jf
------解决方案--------------------
String str=new String(("你好").getBytes(),"UTF-8");

应该改成

String str=new String(("你好").getBytes("UTF-8"), "UTF-8");

貌似这样写没有意义吧
------解决方案--------------------
String str=new String(("你好").getBytes(),"UTF-8");

你写成这样,在Eclipse里面运行完正常?

你不是跟我开玩笑吧。

我先给你解释下。

"你好".getBytes()的意思是按照默认的字符集给字符进行编码

一般情况下我们的电脑,默认的都是gbk

new String(byte[],"UTF-8")

的意思是把该字节数组按照规定字符集(这里是UTF-8)解码。

如果,你这个串没进行过任何操作直接输出肯定是乱码。


------解决方案--------------------
String str=new String(("你好").getBytes(),"UTF-8");

这么操作太另类了。

哥们,你需求是啥啊?
------解决方案--------------------
这么操作本身语义就有问题。

手工转码一般都用在,编解码错误的时候。

而"你好"本来就是你想要的串。干嘛还要人工转码啊。


用人工转码的时候是这样的。

就好比,现在有一个非java程序。他向你的程序发送一个字符串,传送前首先需要进行编码。他按gbk编码后给你的java程序。但是你输入流接受的时候却用了iso8859-1进行解码。于是,你看到的串就不是。他发送时候的了。这个时候你才需要new String(getBytes("iso8859-1"),"gbk").这时候才是需要人工转码的时候。
------解决方案--------------------
You could try to generate the .class files directly via the CMD. (reference: http://blog.csdn.net/gaowen_han/article/details/7163775)
To verify that the execution of the compiled file does not appear the irrecognizable codes. And then pack the .class files into .jar file through CMD. (reference: http://blog.csdn.net/gaowen_han/article/details/7246562)

We can do also a small test: run via CMD the class file extracted from the eclipse workspace directory to examine there are no irrecognizable codes.
------解决方案--------------------
是不是设置下系统环境变量哦!估计系统识别不了UTF-8
------解决方案--------------------
utf8是世界通用的
------解决方案--------------------
LZ你那个字符串在控制台能正常显示?你系统编码都是utf-8啊?
------解决方案--------------------
logger.info(str);
日志文件的字符集设置了么?这个也要设置成utf-8,否则就算你是以utf-8保存的,打开后显示的还是乱码
------解决方案--------------------
换台电脑试试,实在找不到问题那就有可能是系统的原因
------解决方案--------------------
探讨

基本清楚了,,eclipse默认编码UTF-8,win系统中jdk默认编码GBK,并且该默认编码修改file.encoding以及Charset.forName("UTF-8")均修改不了默认编码。。但是和eclipse使用的是一个jdk,不清楚eclipse是怎么修改的。。
Charset.defaultCharset()