Java String Encoding

2025年5月3日 | 阅读3分钟

在 Java 中,当我们处理 **String** 时,有时需要将字符串编码为特定的字符集。**编码**是将数据从一种格式转换为另一种格式的方法。String 对象使用 UTF-16 编码。UTF-16 的问题在于它无法被修改。只有一种方法可以用来获取不同的编码,即 byte[] 数组。如果我们获得意外数据,这种编码方式并不合适。在本节中,我们将学习**如何在 Java 中对字符串进行编码**。

注意:不可能将字符串编码为 UTF-8。所以,请使用 ByteBuffer 或对其调用一个数组来获取 byte[]。

在我们继续本节之前,我们需要了解字符编码。让我们快速浏览一下。让我们了解**为什么我们需要对字符串进行编码**。

**字符编码**是一种将文本数据转换为二进制数字的技术。我们可以为特定字符分配唯一的数值,然后将这些数字转换为二进制语言。这些二进制数字以后可以根据其值转换回原始字符。

问题

假设我们有一个德语字符串 **Tschüss**,需要对其进行编码。请看以下代码片段

如果我们使用 US_ASCII 编码字符串,它将显示 **Tsch?ss**,因为 US_ASCII 编码不识别非 ASCII 字符(**ü**)。当我们把 ASCII 编码的字符串转换为 UTF-8 时,我们得到的是相同的字符串。

如果 byte[] 数组包含非 Unicode 文本,我们可以使用 String 构造函数将文本转换为 Unicode。反之,我们也可以使用 **String.getBytes()** 方法将 String 对象转换为非 Unicode 字符的 byte[] 数组。让我们使用 **getBytes()** 方法对字符串进行编码。

使用 String.getBytes() 方法

Java **String** 类提供了 **getBytes() 方法**,用于将字符串编码为 UTF-8。该方法将字符串转换为字节序列并将结果存储在数组中。

语法

它将 charsetName 作为参数解析,并返回字节数组。如果命名的字符集不受支持,它将抛出 **UnsupportedEncodingException**。

让我们创建一个 Java 程序,将字符串转换为 UTF-8 编码。

StringEncodingExample.java

输出

Encoded String: 
71 111 111 103 108 101 32 67 108 111 117 100

使用 StandardCharsets 类

我们也可以使用 StandardCharset 类来编码字符串。编码字符串有两个步骤。首先,将字符串解码为字节,然后将其编码为 UTF-8。例如,请看以下代码

编码字符串的另一种方法是使用 Base64 编码。我们将在下一节讨论 Base64 编码和解码。