s按照gbk解码,在按照gbk组合成String,为什么就不是乱码了呢? 那2这个字符串是最终是什么编码 utf-8还是gbk
学习是最好的投资!
1:s.getBytes()不带参数的话会调用jdk默认的编码(你的可能是utf-8)将字符串解码成byte[],然后你使用gbk的编码方式重新将byte[]编码成字符串,所以会出现乱码。
2.s.getBytes('gbk')你将字符串按照gbk的方式解码后又重新使用gbk方式编码,所以不会出现乱码。
楼上说的没错,补充一点jdk的默认编码是file.encoding中指定的编码,可以通过Dfile.encoding=GBK这样来修改JVM的默认编码。
file.encoding
Dfile.encoding=GBK
再补充一点编解码的知识,“你好”这个中文要在计算机中传输,必然要把它转换为2进制。怎么转二进制就是这里说的解码。编码的方式有很多种,比如Unicode字符集。这个字符集里面就是各种符号对应的数字,比如你用2345来表示,然后按照一定的方式转换的二进制(具体怎么转换可以网上找一下具体过程)。接收到这一串二进制数,怎么转为汉字就是这里说的编码。编码需要按照一定的方式去解才能得到正确的字符对应关系,比如你的二进制为0101010010,需要按照utf-8的方式去编码才能得到你这个符号并显示出来。
Unicode
你
0101010010
1:s.getBytes()不带参数的话会调用jdk默认的编码(你的可能是utf-8)将字符串解码成byte[],然后你使用gbk的编码方式重新将byte[]编码成字符串,所以会出现乱码。
2.s.getBytes('gbk')你将字符串按照gbk的方式解码后又重新使用gbk方式编码,所以不会出现乱码。
楼上说的没错,补充一点jdk的默认编码是
file.encoding
中指定的编码,可以通过Dfile.encoding=GBK
这样来修改JVM的默认编码。再补充一点编解码的知识,“你好”这个中文要在计算机中传输,必然要把它转换为2进制。怎么转二进制就是这里说的解码。
编码的方式有很多种,比如
Unicode
字符集。这个字符集里面就是各种符号对应的数字,比如你
用2345来表示,然后按照一定的方式转换的二进制(具体怎么转换可以网上找一下具体过程)。接收到这一串二进制数,怎么转为汉字就是这里说的编码。编码需要按照一定的方式去解才能得到正确的字符对应关系,比如
你
的二进制为0101010010
,需要按照utf-8的方式去编码才能得到你
这个符号并显示出来。