Java入门需要了解(编码-四十一)

常见编码表

  • ASCII:美国标准信息交换码,用一个字节的7位来表示。
  • ISO8859-1:拉丁码表,欧洲码表,用一个自己的8位表示
  • GB2312:中国中文编码表。(中国文字太多,有些文字可能失败不了)
  • GBK:中国的中文编码升级表,融合了更多的中文文字符号。
  • Unicode:国际标准码,融合了多种文字,所有文字都用两个字节来表示,Java语句使用的就是Unicode。
  • UTF-8:最多使用三个字节来表示一个字符。
  • 但是不管什么码表,都兼容ASCII码表。

编码和解码

将字符串变成字节数组的过程,称之为编码
将字节数组转为字符串的过程:称之为解码

使用系统默认编码表进行编码和解码


import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;

/**
 * 编码解码测试
 * 将字符串变成字节数组的过程,称之为编码
 * 将字节数组转为字符串的过程:称之为解码
 */
class EncodeTest {
    public static void main(String[] args) throws UnsupportedEncodingException {
        //获取并打印当前系统的默认编码
        String csn = Charset.defaultCharset().name();
        System.out.println("csn = " + csn);
        String str = "编码";
        //使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
        byte[] bytes = str.getBytes();
        //打印出“编码”两个中文对应的字节数字
        for (byte b: bytes) {
            System.out.println("b = " + b);
        }
        String decodeStr = new String(bytes);
        System.out.println("decodeStr = " + decodeStr);
    }
}

使用 UTF-8 编码使用 GBK 解码产生乱码


import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;

/**
 * 编码解码测试
 * 将字符串变成字节数组的过程,称之为编码
 * 将字节数组转为字符串的过程:称之为解码
 */
class EncodeTest {
    public static void main(String[] args) throws UnsupportedEncodingException {
        //获取并打印当前系统的默认编码
        String csn = Charset.defaultCharset().name();
        System.out.println("csn = " + csn);
        String str = "编码";
        //使用UTF-8 进行编码
        byte[] bytes = str.getBytes("UTF-8");
        //打印出“编码”两个中文对应的字节数字
        for (byte b: bytes) {
            System.out.println("b = " + b);
        }
        //使用GBK解码
        String decodeStr = new String(bytes,"GBK");
        System.out.println("decodeStr = " + decodeStr);
    }
}

使用指定的编码表进行编码和解码


import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;

/**
 * 编码解码测试
 * 将字符串变成字节数组的过程,称之为编码
 * 将字节数组转为字符串的过程:称之为解码
 */
class EncodeTest {
    public static void main(String[] args) throws UnsupportedEncodingException {
        //获取并打印当前系统的默认编码
        String csn = Charset.defaultCharset().name();
        System.out.println("csn = " + csn);
        String str = "编码";
        //使用UTF-8 进行编码
        byte[] bytes = str.getBytes("UTF-8");
        //打印出“编码”两个中文对应的字节数字
        for (byte b: bytes) {
            System.out.println("b = " + b);
        }
        //使用UTF-8解码
        String decodeStr = new String(bytes,"UTF-8");
        System.out.println("decodeStr = " + decodeStr);
    }
}

关于编码的问题

  • 如果在进行编码时,使用了不识别当前文字的码表进行编码,那么这样的编码,将无法被恢复。
  • 如果编码正确,解码时错误,则有可能有解。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值