java特殊字符乱码,Java出现乱码
原因:
编解码不一致导致字符乱码。
首先我们可以通过调用Java . nio . charset . charset . default charset()得到系统的默认字符集。中文Windows系统都是GBK,所以JVM默认使用GBK字符集编解码。
相关视频学习教程:java教学视频
乱码最大的可能是编解码不一致。
//代码片段1:
Byte[] read=你好abc 。getBytes();
字符串结果=新字符串(读取);
System.out.println(结果);此上诉代码有三个步骤:
1.编码。这里是这样写的,让它看起来更简洁。其实和你从文件/网络等其他介质上读取也是一样的。原始输入流是什么类型的编码,读取后是什么类型的编码。这里没有指定编码方法,所以默认为GBK。
2.解码。我们最后的操作都是字符串对象,通过指定字符串对字节数组的解码方法,最终可以得到一个字符串对象。这里没有指定解码方法,所以默认为GBK。
3.输出和使用字符串。其实这里还有另外一个编解码过程,就是输出流编码为GBK,控制台解码为GBK,最后显示出来。因为字符串的输出和使用都是基于系统的默认字符集,不存在编解码不一致的可能,所以这不是乱码的来源。
假设我们改变输入流的编码:
//代码片段2:
Byte[] read=你好abc 。getBytes( utf-8 );
字符串结果=新字符串(读取);
System.out.println(结果);我们再来分析一下这三个步骤:
1.编码,UTF-8;
2.解码,gbk。
不一致的编码和解码在这里导致乱码。
至于怎么修,相信已经很清楚了。
修复方法如下:
//代码片段3:
Byte[] read=你好abc 。getBytes( utf-8 );
String result=新字符串(read, utf-8 );
System.out.println(结果);只需更改解码模式以对应编码即可。
小结:
1.一般我们很难控制输入流是什么编码,所以解码的时候要注意输入流的编码类型。一般我们调用输入流的相关方法时,看到的是charset参数,指的是解码方法。
2.也可以操作输出流的编码方法。如果以后用输入流操作输出结果,比如文件,只要都是默认方式执行,就不会出现乱码。通常,当我们调用输出流的相关方法时,我们会看到charset参数,它指的是编码方法。
推荐文章教程:java入门教程以上是java中乱码的详细内容。请多关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。