Java字符集编码解码详细介绍

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

字符集

字符集的基本认识

字符集基础知识

计算机底层不可以直接存储字符的。计算机中底层只能存储二进制(0、1)

二进制是可以转换成十进制的

计算机底层可以表示十进制编号。计算机可以给人类字符进行编号存储这套编号规则就是字符集。

ASCII字符集:

ASCII(American Standard Code for Information Interchange美国信息交换标准代码)包括了数字、英文、符号。

ASCII使用1个字节存储一个字符一个字节是8位总共可以表示128个字符信息对于英文数字来说是够用的。

例如:

  • 01100001‬ = 97 => a
  • ‭01100010‬ = 98 => b

GBK:

window系统默认的码表。兼容ASCII码表也包含了几万个汉字并支持繁体汉字以及部分日韩文字。

注意GBK是中国的码表一个中文以两个字节的形式存储。但不包含世界上所有国家的文字。

Unicode码表:

unicode又称统一码、万国码、单一码是计算机科学领域里的一项业界字符编码标准。

容纳世界上大多数国家的所有常见文字和符号。

由于Unicode会先通过UTF-8UTF-16以及 UTF-32的编码成二进制后再存储到计算机其中最为常见的就是UTF-8。

注意:

Unicode是万国码以UTF-8编码后一个中文一般以三个字节的形式存储。

UTF-8也要兼容ASCII编码表。

技术人员都应该使用UTF-8的字符集编码。

编码前和编码后的字符集需要一致否则会出现中文乱码。

汉字存储和展示过程解析:

在这里插入图片描述

小结 :

字符串常见的字符底层组成

英文和数字等在任何国家的字符集中都占1个字节

GBK字符中一个中文字符占2个字节

UTF-8编码中一个中文1般占3个字节

字符串常见的字符底层组成要求

必须一致否则会出现中文字符乱码

英文和数字在任何国家的编码中都不会乱码

字符集编码和解码

String编码:

方法名称说明
byte[] getBytes()使用平台的默认字符集将该String编码为一系列字节将结果存储到新的字节数组中
byte[] getBytes(String charsetName)使用指定的字符集将该String编码为一系列字节将结果存储到新的字节数组中

编码示例代码

public static void main(String[] args) {
    String name = "学习Java";
  
  	// 使用默认字符集(UTF-8)进行编码
    byte[] bytes = name.getBytes();
    System.out.println(Arrays.toString(bytes)); 
  	// [-27, -83, -90, -28, -71, -96, 74, 97, 118, 97]
}
public static void main(String[] args) throws UnsupportedEncodingException {
    String name = "学习Java";

  	// 指定字符集(GBK)进行编码
    byte[] bytes = name.getBytes("GBK");
    System.out.println(Arrays.toString(bytes)); // [-47, -89, -49, -80, 74, 97, 118, 97]
}

String解码:

构造器说明
String(byte[] bytes)通过使用平台的默认字符集解码指定的字节数组来构造新的 String
String(byte[] bytes, String charsetName)通过指定的字符集解码指定的字节数组来构造新的 String

解码实例代码

注意编码和解码的字符集必须一致, 否则会乱码

默认UTF-8解码

public static void main(String[] args) throws UnsupportedEncodingException {
    String name = "学习Java";

    // 编码
    byte[] bytes = name.getBytes();
    System.out.println(Arrays.toString(bytes)); // [-27, -83, -90, -28, -71, -96, 74, 97, 118, 97]

    // 解码
    String newName = new String(bytes);
    System.out.println(newName); // 学习Java
}

指定GBK解码

public static void main(String[] args) throws UnsupportedEncodingException {
    String name = "学习Java";

    // 编码
    byte[] bytes = name.getBytes("GBk");
    System.out.println(Arrays.toString(bytes)); // [-47, -89, -49, -80, 74, 97, 118, 97]

    // 解码
    String newName = new String(bytes, "GBK");
    System.out.println(newName); // 学习Java
}
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Java