18

我正在努力使我的一个工作程序国际化。我正在尝试使用远见来避免可能出现的问题或重做该过程。

我看到了 UTF-8、UTF-16 和 UTF-32 的参考资料。我的问题是两个部分:

  1. UTF-8支持哪些语言?
  2. UTF-16 和 UTF-32 相比 UTF-8 有哪些优势?

如果 UTF-8 适用于一切,那么我很好奇 UTF-16 和 UTF-32 的优势是什么(例如,数据库中的特殊搜索功能等)理解应该有助于我完成程序设计(和数据库连接) ) 适当地。谢谢!

4

2 回答 2

18

这三种只是表示同一事物的不同方式,因此没有一种语言支持而另一种语言不支持。

有时 UTF-16 会被您需要与之互操作的系统使用 - 例如,Windows API 本机使用 UTF-16。

理论上,UTF-32 可以在单个 32 位整数中表示任何“字符”,而无需使用多个整数,而 UTF-8 和 UTF-16 需要使用多个 8 位或 16 位整数要做到这一点。但在实践中,对于某些代码点的组合和非组合变体,这并不是真的。

UTF-8 优于其他的一个优点是,如果您有一个错误,即假设 8 位、16 位或 32 位整数的数量分别与代码点的数量相同,那么它会更快地变得明显使用 UTF-8 - 只要你有任何非 ASCII 代码点,就会失败,而使用 UTF-16,错误可能会被忽视。

要回答您的第一个问题,以下是 Unicode 目前不支持的脚本列表:http ://www.unicode.org/standard/unsupported.html

于 2013-03-27T16:21:05.343 回答
13

UTF8 是可变的 1 到 4 个字节,UTF16 是 2 或 4 个字节,UTF32 是固定的 4 个字节。

这就是为什么 UTF-8 在 ASCII 是最普遍的字符的情况下具有优势的原因,UTF-16 在 ASCII 不占优势的情况下更好,UTF-32 将覆盖 4 个字节中的所有可能的字符。

于 2013-03-27T16:21:53.660 回答