当前位置:编程学习 > JAVA >>

String.getBytes(),迷茫在编码上,来人帮忙呀!

我按照这个写,没有问题,中文可以转换:
public void setFileName(String fileName) throws UnsupportedEncodingException {
this.fileName = new String(fileName.getBytes("ISO-8859-1"),"UTF-8");
}

但是,我按照这个写,中文就无法转换了,不明白为什么。
public void setFileName(String fileName) throws UnsupportedEncodingException {
this.fileName = new String(fileName.getBytes(),"UTF-8");
}

String.getBytes()方法是使用平台默认的字符集,把这个String类型编译成byte序列。
可是为什么用ISO-8859-1可以正确的转换中文,而不写参数却不行呢?
java action string.getBytes() ISO-8859-1 --------------------编程问答-------------------- 看懂下面的文章就明白是怎么回事了
深入分析 Java 中的中文编码问题: http://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/ --------------------编程问答-------------------- 1楼推荐的文章图文并貌! --------------------编程问答-------------------- 更正:
图文并茂! --------------------编程问答-------------------- public void setFileName(String fileName) throws UnsupportedEncodingException {
 this.fileName = new String(fileName.getBytes("ISO-8859-1"),"UTF-8");
 }

字符串fileName搞这么多次编码,解码做什么
之所以前一种可以,是因为在调用setFileName方法之前fileName就有问题,之前就用ISO-8859-1去解码的,而中文怎么能用ISO-8859-1去解码呢,因为用ISO-8859-1去编码,肯定是乱码.
从你的程序看,fileName是用UTF-8编码的.所以把fileName用ISO-8859-1编码回去,重新用UTF-8解码回来. --------------------编程问答-------------------- this.fileName = new String(fileName.getBytes(),"UTF-8");
等于把字符串分成二进制了,就算转成utf-8,但是电脑却不知道几个二进制组成到Utf-8的一个字符,所以乱码
而this.fileName = new String(fileName.getBytes("ISO-8859-1"),"UTF-8");
是告诉电脑我用ISO-8859-1编码转成Utf-8,电脑就会按照ISO-8859-1来识别并转换 --------------------编程问答-------------------- 楼主的fileName开始接收的就是乱码了,你使用tomcat服务器的是吧。
编码是getBytes(),解码是new String()
tomcat服务器默认是ISO8859-1解码,楼主你是用utf-8编码的形式传到tomcat服务器,假设你传“你好”两个字,浏览器以你utf-8编码的形式编码成“-1 -2 -3 -4 -5 -6”的形式传到tomcat服务器,然后tomcat服务器会以他默认的编码来进行解码,在iso8859中当然找不到,所以就出现了??????的字符(这几个字符不一样),然后像你第一种情况,你先用了fileName.getBytes("ISO-8859-1")来进行再编码,这样就得到了原来的“-1 -2 -3 -4 -5 -6”,然后你用了new String(fileName.getBytes("ISO-8859-1"),"UTF-8");进行正确的解码,这样就得到了“你好”这两个字了;而你第二种fileName.getBytes(),windows平台的话它默认是getBytes("gbk"),也就是你用了gbk来进行编码了,这样??????在gbk编码表中找到的就不是“-1 -2 -3 -4 -5 -6”原来的这几个数字了,所以你用utf再解码,也是解不出原来的“你好”
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,