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

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刚开始接触,各种不懂~求大神解答

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开发,乱码是一种很常见而且很头疼的问题,这常常是由于页面端、服务端、数据库等几处所使用的字符不一致所致,故开发中,保持编码一致, 往往能减少由于乱码而带来的时间浪费,是一件非常重要的事情。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-12-11
你这本来就是正常的,b = "大家一起来学习java".getBytes("GBK");的意思就是让这个字符串按照gbk的编码正常显示。

你应该这样测试,写出到encoding.txt的时候用gbk编码,你设置ssa.java文件的编码为utf-8,然后读取encoding.txt里面的内容不做转换,直接显示追问

其实我不太明白 file.encoding到底是改变的是JVm编译时对XX.java文件的的编码方式还是什么?找个好多资料都说的挺含糊的

本回答被网友采纳
第2个回答  2013-12-11
亲爱童鞋,首先,乱码不是这么理解的。比如说前后台交互,发送方编码是UTF-8,接受方却是GBK,这样的话就会产生乱码,明白?就是说你的两边的编码格式不一致到时乱码产生。并不是说你这样转码之后就成乱码了。乱码的产生,和解决原理你没有明白。一般产出乱码的情况都是两边编码格式不一致导致的,所以你要清楚数据在交互过程中的底层编码。。。
第3个回答  2013-12-11
眼睛有点花。。暂时不看代码先。。你都说utf-8转成gbk了,都经过转换了为什么会出现乱码?就像你打开utf-8的txt,另存为gbk的,不会出现乱码的啊!只有你读取方式错误的话会出现乱码
第4个回答  2013-12-11
你把后面的.getBytes("GBK")去掉就知道会不会乱码了

java中UTF-8转GBK为什么不会出现中文乱码?
Java中UTF-8转GBK之所以不会出现中文乱码,是因为UTF-8编码为兼容性最大的字符集编码,它本身就支持中文字符。Java代码转码范例:String s = new String(ss.getBytes(),"GBK");当你的内容本来就是正常的中文字符时,通过上面的语句转为GBK编码是不会有任何问题的,但如果你在转码之前的字符不是正确...

java utf 8转gbk
utf8和gb2312本来就是两个不同的字符集,对于中文来说,它们的编码并不会相同。如果刚开始的字符是utf8的,那么转换为gb2312后自然会是乱码;如果初始时是gb2312的中文,而后经utf8中间编码后又从utf8转为gb2312后不会是乱码的。我想是这样的!这有往篇文章,是关于java字符编码相关的,讲的很详细...

手头有个utf-8的项目要对接另外一个gbk的项目的接口,我在向gbk项目传递...
手头有个utf-8的项目要对接另外一个gbk的项目的接口,我在向gbk项目传递参数时发现貌似会出现乱码的问题 20 代码是java的:参数传递时候已经已gbk的方式传递了,具体代码如下URLurl=newURL(urlStr);HttpURLConnectionconn=(HttpURLConnection)url.openConnection();conn.setRequestMethod("PO... 代码是java的:参数传...

java工程是utf-8,工程里引入的文件是gbk编码存储的,怎么读不乱码
方法二:如果当前工作间设置了UTF-8编码,导入的项目使用的是GBK编码,需要额外指定项目的编码为:GBK。点击项目,鼠标右键“Properties——>Resource”,选择“Other”选项,指定编码为GBK

java解决中文乱码转码
乱码的原因在于编码方式的不匹配,比如在一个使用UTF-8编码的环境中,如果使用了GBK编码去读取数据,就会导致中文乱码。因此,解决乱码问题的关键是确保在相同的环境中使用相同的编码方式。具体解决方法可以分为以下几个方面:1. 确保源代码文件本身保存时使用的编码方式是正确的。在Java开发环境中,一般推荐...

java中如何将字符串的编码从utf-8转换成gbk而且不会产生乱码
具体点,做什么的时候乱码?如果是中文url,页面发送的时候URLEncoder.encode("你的字符串","GBK") 服务器端接收String str = new String("你get到的字符串".getBytes("iso-8859-1"),"GBK")

java调用接口返回utf8,我用gbk格式的java文件获取的中文部分是...
Java内部都是用Unicode编码 你说的utf8格式的java文件,是代码的编码方式,与内部存储无关 所以你用GBK编码,用UTF-8解码,是乱码很正常

Java中如果自身是utf8编码,再用utf8编码转下会成乱码吗
Java 中内核是 unicode,字符集只是在逗当我们想把它通过网络发送出去或保存到磁盘或打印机上去地 才需要按字符集的方案编码成 byte[]。 所以你这句话中的逗Java中如果自身是 utf8" 这段是没有意义的。 一个 String 字符串不存在字符集概念,只有把一个 String 转换成 byte[] 时才需要指定...

Java中如果自身是utf8编码,再用utf8编码转下会成乱码吗
Java 中内核是 unicode,字符集只是在“当我们想把它通过网络发送出去或保存到磁盘或打印机上去” 才需要按字符集的方案编码成 byte[]。所以你这句话中的“Java中如果自身是 utf8" 这段是没有意义的。一个 String 字符串不存在字符集概念,只有把一个 String 转换成 byte[] 时才需要指定字符集。...

java类中无论是把属性设置为GBK还是utf-8,其中的中文都还是乱码,应该怎 ...
有的文件的乱码,乱了之后就回复不了了。这个应该是初始编码是GBk的,然后被保存成utf-8了,你现在转回去会出现各种中文乱码是吧。这个是解决不了的。删除了重新写吧。哎,我们的项目也这样,我曾经试图解决过。

相似回答