转换非 Unicode 文本

原文: https://docs.oracle.com/javase/tutorial/i18n/text/convertintro.html

在 Java 编程语言中,char值表示 Unicode 字符。 Unicode 是一种支持世界主要语言的 16 位字符编码。您可以在 Unicode Consortium 网站上了解有关 Unicode 标准的更多信息。

很少有文本编辑器支持 Unicode 文本输入。我们用来编写本节代码示例的文本编辑器仅支持 ASCII 字符,限制为 7 位。为了表示不能用 ASCII 表示的 Unicode 字符,例如ö,我们使用了\uXXXX转义序列。转义序列中的每个X都是十六进制数字。以下示例显示如何使用转义序列指示ö字符:

  1. String str = "\u00F6";
  2. char c = '\u00F6';
  3. Character letter = new Character('\u00F6');

世界各地的系统使用各种字符编码。目前,这些编码很少符合 Unicode。由于您的程序需要 Unicode 中的字符,因此从系统获取的文本数据必须转换为 Unicode,反之亦然。当文本文件的编码与 Java 虚拟机的默认文件编码匹配时,文本文件中的数据将自动转换为 Unicode。您可以通过使用它创建OutputStreamWriter并询问其规范名称来识别默认文件编码:

  1. OutputStreamWriter out = new OutputStreamWriter(new ByteArrayOutputStream());
  2. System.out.println(out.getEncoding());

如果默认文件编码与您要处理的文本数据的编码不同,则必须自己执行转换。处理来自其他国家/地区或计算平台的文本时,您可能需要执行此操作。

本节讨论用于将非 Unicode 文本转换为 Unicode 的 API。在使用这些 API 之前,您应该验证是否支持要转换为 Unicode 的字符编码。支持的字符编码列表不是 Java 编程语言规范的一部分。因此,API 支持的字符编码可能随平台而变化。要查看 Java Development Kit 支持哪些编码,请参阅 Supported Encodings 文档。

下面的材料描述了将非 Unicode 文本转换为 Unicode 的两种技术。您可以将非 Unicode 字节数组转换为String对象,反之亦然。或者,您可以在 Unicode 字符流和非 Unicode 文本的字节流之间进行转换。

字节编码和字符串

本节介绍如何将非 Unicode 字节数组转换为String对象,反之亦然。

字符和字节流

在本节中,您将学习如何在 Unicode 字符流和非 Unicode 文本字节流之间进行转换。