【问题标题】:Point of other encoding rather than UTF-8点其他编码而不是 UTF-8
【发布时间】:2025-12-29 16:00:10
【问题描述】:

我在各种编程语言中使用String 已经很长时间了,我还没有遇到需要使用除UTF-8 之外的任何其他编码的情况

这个问题可能感觉像是基于意见,但我不明白为什么其他编码应该可用。

只有一个标准不是让每个人(尤其是程序员)的生活更轻松吗?

我以Java为例:

可以在此处找到一组当前可用的 Java 编码:

https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html

【问题讨论】:

  • *.com/questions/10088473/…。某些编码可能对某些类型的数据更有效,与遗留应用程序交互可能是某些原因。
  • 使用不同编码的原因 => 遗留系统或硬件(UTF-8 于 1993 年发布)和性能(UTF-16 通常是存储在内存中以使基于字符偏移的操作更有效)。
  • 还请考虑与旧程序的交互。虽然我同意 UTF-8 在大多数情况下应该是默认值,但有时您需要能够选择另一种编码(或者您是否愿意每次都重新开发一种编码转换算法?)。

标签: java string encoding utf-8


【解决方案1】:

UTF-8: Advantages and disadvantages

典型的说法是:

亚洲语言有更多的字符,需要超大 为他们的语言编码。

不过,在我看来,利大于弊:

  1. UTF-8,由于与 ASCII 兼容,通常更强大
  2. 它是 Unicode 的事实
  3. 其他 UTF-16/32 不是固定长度的
  4. 其他非 unicode 极其复杂

我想看看这里:Why don't people use other encodings

【讨论】:

  • 一个很好的观点,每种编码都有优缺点。但正如你所说,优点胜过缺点。这正是我的观点
  • UTF-8 不是固定长度的,与 UTF-16 或 UTF-32 一样。 UTF-8 对每个 Unicode 代码点使用 1、2、3 或 4 个字节,具体取决于其值。 UTF-16 每个代码点使用 2 或 4 个字节,具体取决于其值。 UTF-32 总是至少每个代码点使用 4 个字节。但在所有这三种情况下,可能需要多个代码点来表示用户实际看到的任何给定字形。因此,所有三种编码实际上都是可变长度的。
【解决方案2】:

Java 中的字符串在内部表示为 UTF-16,当您构建字符串时,您不必告诉使用哪种编码作为内部表示(但如果您从数组构建字符串,则必须传递编码字节)。

您提供的链接显示了可用于读写操作的编码;如果您想在默认编码为 UTF-8 的平台上正确读取以 ISO-8859-1 编码的文本文件,您必须指定正确的编码,并且您的语言(在本例中为 java)必须能够自动转换编码形式到另一个。

Java 管理大量编码和从一种编码到另一种编码的转换,但在内部它将字符串表示为 UTF-16,但您不必担心这一点;您只需在将字符串转换为字节序列时指定编码,反之亦然。

【讨论】: