• 技术文章 >Java >Java基础

    java中的字符出现乱码

    VV2019-11-26 16:45:09原创659

    原因:

    编解码不一致导致字符乱码。

    首先,我们可以通过调用java.nio.charset.Charset.defaultCharset()获得系统的默认字符集,中文Windows系统都是GBK,所以JVM默认都是以GBK字符集来进行编解码。

    相关视频学习教程:java教学视频

    乱码产生最大的可能性在于编解码不一致。

    // 代码片段1:
    byte[] read = "你好abc".getBytes(); 
    String result = new String(read);
    System.out.println(result);

    上诉这段代码一共有3步:

    1、编码。这里为了看起来更简洁就这样写,事实上和你从文件/网络等其他媒介读取是一样的,原本输入流是什么类型编码,读取后也是什么类型编码。这里没有指定编码方式,所以默认为GBK。

    2、解码。我们最终的操作都是字符串对象,可以通过指定字符串的对字节数组的解码方式,最终获得一个字符串对象。这里没有指定解码方式,所以默认为GBK。

    3、输出、使用字符串。事实上这里还有一次编解码过程,就是输出流编码为GBK,控制台解码为GBK,最终显示。因为输出、使用字符串时都是以系统默认字符集进行,不存在编解码不一致的可能,所以这里不会是乱码根源。

    假设我们将输入流的编码改一下:

    // 代码片段2:
    byte[] read = "你好abc".getBytes("utf-8"); 
    String result = new String(read);
    System.out.println(result);

    再来分析一下3步:

    1、编码,utf-8;

    2、解码,gbk。

    编解码不一致,这里便产生了乱码。

    至于如何修复,相信已经很清楚了。

    修复方法如下:

    // 代码片段3:
    byte[] read = "你好abc".getBytes("utf-8"); 
    String result = new String(read,"utf-8");
    System.out.println(result);

    将解码方式改为与编码对应就可以了。

    小结:

    1、我们一般比较难控制输入流是什么编码,所以注意解码时与输入流的编码类型一致即可。我们一般在调用输入流的相关方法看到有charset参数,就是指解码方式。

    2、输出流同样可以操作其编码方式,如果后续会以输入流操作这个输出的结果,比如说文件,只要都以默认的方式进行,便不会产生乱码。我们一般在调用输出流的相关方法看到有charset参数,就是指编码方式。

    推荐相关文章教程:java入门教程

    以上就是java中的字符出现乱码的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:java 字符 乱码
    上一篇:java学习流程介绍 下一篇:java中如何判断一个字符串包含几个指定字符
    大前端线上培训班

    相关文章推荐

    • 如何避免java程序中出现乱码• java集合类图文教程• java中的队列包括哪些• java中判断一个字符串是否包含某个字符的方法

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网