Java 对字符串进行编码设置

在 Java 编程中,字符串是一种常用的数据类型,用于表示文本数据。然而,在处理字符串时,我们经常需要对其进行编码设置,以确保字符的正确显示和传输。本文将介绍 Java 中常用的字符串编码设置方法,并通过代码示例演示其用法。

什么是字符串编码?

字符串编码是将字符转换成字节的过程。在计算机中,所有的数据都是以二进制的形式存储和传输的,而字符则是由一系列字节组成的。字符串编码定义了字符与字节之间的映射关系,使得我们可以将字符转换成字节表示,以便在计算机系统中进行处理。

常见的字符串编码方式

Java 提供了多种字符串编码方式,常见的有 ASCII、UTF-8、UTF-16 等。不同的编码方式使用不同的字节序列表示字符,具有不同的特点和适用场景。

  • ASCII:ASCII 编码是最早的一种字符编码方式,使用 7 位二进制数表示字符。ASCII 编码只能表示 128 个字符,包括英文字母、数字、标点符号等,不包括其他语言的字符。
  • UTF-8:UTF-8 是一种变长编码方式,能够表示任意 Unicode 字符。它使用 1-4 个字节表示一个字符,根据字符的不同范围选择不同长度的字节序列。UTF-8 编码在互联网上广泛使用,适合表示多种语言的字符。
  • UTF-16:UTF-16 是一种固定长度编码方式,使用 2 个字节或 4 个字节表示一个字符。它可以表示任意 Unicode 字符,但相对于 UTF-8,UTF-16 的字节序列长度更固定。

字符串编码设置示例

下面是一些常见的字符串编码设置示例,展示了如何在 Java 中进行编码设置。

示例一:将字符串转换为字节数组

public class EncodingExample {
    public static void main(String[] args) {
        String str = "Hello, 世界!";
        byte[] bytes = str.getBytes(); // 使用平台默认编码方式将字符串转换为字节数组
        System.out.println(Arrays.toString(bytes));
    }
}

上述代码中,我们使用 getBytes() 方法将字符串 str 转换为字节数组。该方法使用平台默认的编码方式将字符串转换为字节序列。运行代码,输出结果为 [72, 101, 108, 108, 111, 44, 32, -28, -72, -83, -27, -101, -67, 33],其中正数表示 ASCII 字符,负数表示非 ASCII 字符。

示例二:指定编码方式将字节数组转换为字符串

public class EncodingExample {
    public static void main(String[] args) {
        byte[] bytes = {72, 101, 108, 108, 111, 44, 32, -28, -72, -83, -27, -101, -67, 33};
        String str = new String(bytes); // 使用平台默认编码方式将字节数组转换为字符串
        System.out.println(str);
        
        String utf8Str = new String(bytes, StandardCharsets.UTF_8); // 使用 UTF-8 编码方式将字节数组转换为字符串
        System.out.println(utf8Str);
    }
}

上述代码中,我们使用 new String(bytes) 方法将字节数组转换为字符串,默认使用平台默认的编码方式。另外,我们还可以使用 new String(bytes, charset) 方法指定编码方式将字节数组转换为字符串。运行代码,输出结果分别为 Hello, 世界!Hello, 世界!,可以看到两者结果相同,但编码方式不同。

示例三:指定编码方式将字符串转换为字节数组

public class EncodingExample {
    public static void main(String[] args) {
        String str = "Hello, 世界!";
        byte[] utf8Bytes = str.getBytes(StandardCharsets.UTF_8); // 使用 UTF-8 编码方式将字符串转换为字节数组
        System.out.println(Arrays.toString(utf8Bytes