UTF-8、GBK、ISO-8859-1之间的解码和转码

编码:将字符或者其他符号编成计算机可以计算处理的二进制0、1数字。
解码:将一系列二进制0、1数字解码成字符或者其他符号(编码的逆向过程)。

测试代码如下:

package com.qfedu.test;
import java.util.Arrays;

public class Test6 {
    public static void main(String[] args) throws Exception {
        demo1();
        System.out.println("--------------------");
        demo2();
        System.out.println("--------------------");
        demo3();
    }
    /**
     * 测试utf-8编码,使用gbk或者iso-8859-1解码在编码,能否再使用utf-8解码回去
     * @throws Exception
     */
    public static void demo1() throws Exception {
        String s = "哈哈";
        byte[] utf8 = s.getBytes("UTF-8");                                      // 使用utf-8编码

        String s1 = new String(utf8, "GBK");                                    // 使用gbk解码
        String s2 = new String(utf8, "ISO-8859-1");                             // 使用ISO-8859-1解码
        System.out.println(new String(s1.getBytes("GBK"), "UTF-8"));            // 哈哈
        System.out.println(new String(s2.getBytes("ISO-8859-1"), "UTF-8"));     // 哈哈
        System.out.println("经测试,经过utf-8编码的能通过gbk和iso-8859-1解码再编回去"); 

    }
    /**
     *  测试gbk编码,使用utf-8或者iso-8859-1解码再编码,能否再使用gbk解码回去
     */
    public static void demo2() throws Exception  {
        String s = "吃饭";
        byte[] gbk = s.getBytes("GBK");                                     // 使用gbk编码

        String s1 = new String(gbk, "UTF-8");                               // 使用utf-8解码
        String s2 = new String(gbk, "ISO-8859-1");                          // 使用ISO-8859-1解码
        System.out.println(new String(s1.getBytes("UTF-8"), "GBK"));        // 锟皆凤拷
        System.out.println(new String(s2.getBytes("ISO-8859-1"), "GBK"));   // 吃饭

        System.out.println("经测试,经过gbk编码只能通过iso-8859-1解码编回去"); 

    }
    /**
     * 测试iso-8859-1编码,使用utf-8或者gbk解码再编码,能否再使用iso-8859-1解码回去
     * @throws Exception
     */
    public static void demo3() throws Exception {
        String s = "西红柿炒鸡蛋";
        byte[] iso = s.getBytes("ISO-8859-1");                       // 使用ISO-8859-1编码
        System.out.println(Arrays.toString(iso));
        String s1 = new String(iso, "UTF-8");                        // 使用UTF-8解码
        String s2 = new String(iso, "GBK");                          // 使用GBK解码

        System.out.println(new String(s1.getBytes("UTF-8"), "ISO-8859-1"));
        System.out.println(new String(s2.getBytes("GBK"), "ISO-8859-1"));
        System.out.println("经测试,ISO-8859-1编码不能使用UTF-8或GBK解码编回去");

    }

}

运行结果如下:

哈哈
哈哈
经测试,经过utf-8编码的能通过gbk和iso-8859-1解码再编回去
--------------------
锟皆凤拷
吃饭
经测试,经过gbk编码只能通过iso-8859-1解码编回去
--------------------
[63, 63, 63, 63, 63, 63]
??????
??????
经测试,ISO-8859-1编码不能使用UTF-8或GBK解码编回去

总结:utf-8编码的可以通过gbk或者iso-8859-1解码再编回去
gbk编码的只能通过iso-8859-1解码再编回去

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值