java中UTF-8转GBK为什么不会出现中文乱码? 30

packagetest;importjava.io.*;publicclassssa{publicstaticvoidmain(String[]args){//TODOA... package test;
import java.io.*;
public class ssa {

public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(System.getProperty("file.encoding"));
System.getProperties().put("file.encoding", "UTF-8");
System.out.println(System.getProperty("file.encoding"));
//try {
byte b[] = null;
try {
b = "大家一起来学习java".getBytes("GBK");
} catch (UnsupportedEncodingException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}

OutputStream ak = null;
try {
ak = new FileOutputStream(new File("d:\\encoding.txt"));
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

try {
ak.write(b);
} catch (IOException e) {

e.printStackTrace();
}
try {
ak.close();
} catch (IOException e) {

e.printStackTrace();
}
}

}
发现运行后正常输出“大家一起来学习java”,UTF-8中文不是3字节,而GBK中文是两字节,为什么不会出现中文乱码,java刚开始接触,各种不懂~求大神解答
展开
 我来答
zh857872
2015-08-07 · TA获得超过1415个赞
知道小有建树答主
回答量:426
采纳率:100%
帮助的人:304万
展开全部
Java中UTF-8转GBK之所以不会出现中文乱码,是因为UTF-8编码为兼容性最大的字符集编码,它本身就支持中文字符。

Java代码转码范例:
String s = new String(ss.getBytes(),"GBK");
当你的内容本来就是正常的中文字符时,通过上面的语句转为GBK编码是不会有任何问题的,但如果你在转码之前的字符不是正确的中文字符,或者不是支持中文字符的字符集,那可能就会出现乱码问题。

UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到6个字节编码UNICODE字符。用在网页上可以同一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。

在Java开发中,特别是web开发,乱码是一种很常见而且很头疼的问题,这常常是由于页面端、服务端、数据库等几处所使用的字符不一致所致,故开发中,保持编码一致, 往往能减少由于乱码而带来的时间浪费,是一件非常重要的事情。
LXH929257102
2013-12-11 · TA获得超过489个赞
知道小有建树答主
回答量:545
采纳率:100%
帮助的人:248万
展开全部
你这本来就是正常的,b = "大家一起来学习java".getBytes("GBK");的意思就是让这个字符串按照gbk的编码正常显示。

你应该这样测试,写出到encoding.txt的时候用gbk编码,你设置ssa.java文件的编码为utf-8,然后读取encoding.txt里面的内容不做转换,直接显示
追问
其实我不太明白 file.encoding到底是改变的是JVm编译时对XX.java文件的的编码方式还是什么?找个好多资料都说的挺含糊的
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kwg2maxiaowen
2013-12-11 · TA获得超过207个赞
知道答主
回答量:56
采纳率:0%
帮助的人:35.3万
展开全部
亲爱童鞋,首先,乱码不是这么理解的。比如说前后台交互,发送方编码是UTF-8,接受方却是GBK,这样的话就会产生乱码,明白?就是说你的两边的编码格式不一致到时乱码产生。并不是说你这样转码之后就成乱码了。乱码的产生,和解决原理你没有明白。一般产出乱码的情况都是两边编码格式不一致导致的,所以你要清楚数据在交互过程中的底层编码。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友799369c
2013-12-11 · TA获得超过562个赞
知道小有建树答主
回答量:514
采纳率:66%
帮助的人:160万
展开全部
眼睛有点花。。暂时不看代码先。。你都说utf-8转成gbk了,都经过转换了为什么会出现乱码?就像你打开utf-8的txt,另存为gbk的,不会出现乱码的啊!只有你读取方式错误的话会出现乱码
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
陈哥深惠通勤
2013-12-11 · TA获得超过1176个赞
知道小有建树答主
回答量:1909
采纳率:33%
帮助的人:837万
展开全部
你把后面的.getBytes("GBK")去掉就知道会不会乱码了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式