55

作为应用程序开发人员,我需要了解 Unicode 吗?

4

7 回答 7

45

Unicode 是一种标准,它为书面交流中使用的字形定义数字代码。或者,正如他们自己所说:

用于书写世界上所有语言的字符的数字表示标准。Unicode 提供了一种统一的方式来存储、搜索和交换任何语言的文本。它被所有现代计算机使用,并且是在 Internet 上处理文本的基础。Unicode 由 Unicode 联盟开发和维护。

开发人员犯了许多常见但很容易避免的编程错误,他们不费心自学 Unicode 及其编码。

  • 首先,去源头获取权威、详细的信息和实施指南。
  • 正如其他人所提到的,Joel Spolsky列出了这些错误。
  • 我也喜欢 Elliotte Rusty Harold 的 Unicode 十诫
  • 开发人员还应注意 规范表示攻击。

您应该了解的一些关键概念是:

  • 字形——用于表示书写字符的具体图形。
  • 组合——组合字形以创建另一个字形。
  • 编码——将 Unicode 点转换为字节流。
  • Collat ​​ion — Unicode 字符串的区域敏感比较。
于 2008-10-21T16:03:03.573 回答
12

冒着添加另一个链接的风险,unicode.org是一个壮观的资源。

简而言之,它是 ASCII 的替代品,旨在处理人类曾经使用过的每个字符。Unicode 有各种编码方案来处理所有这些字符 - UTF-8,现在或多或少是标准,非常努力地保持每个字符一个字节,并且前 7 位与 ASCII 相同。

(作为附录,程序员中有一个普遍的误解,即如果你要进行国际化,你只需要了解 Unicode。虽然这肯定是一种用途,但它不是唯一的用途。例如,我正在研究一个只会使用英文文本的项目 - 但有大量花哨的数学符号。将整个项目转移到完全 Unicode 解决的问题比我数不清。)

于 2008-10-21T16:02:43.120 回答
4

Unicode 是业界一致认可的标准,用于一致地表示能够表示世界字符系统的文本。所有开发人员都需要了解它,因为全球化是一个日益受到关注的问题。

于 2008-10-21T15:57:53.100 回答
3

处理 Unicode 的一个(开放)代码源是ICU - Unicode 的国际化组件。它包括用于 Java 的 ICU4J 和用于 C 和 C++ 的 ICU4C(提供 C 接口;使用 C++ 编译器)。

于 2008-10-21T16:13:38.717 回答
2

Unicode 是一个字符集,除了 ASCII(只包含英文字母,127 个字符,其中三分之一实际上是不可打印的控制字符)包含大约 200 万个字符,包括所有已知语言的字符(中文、俄文、希腊语、阿拉伯语等)和一些您可能从未听说过的语言(甚至许多不再使用的死语言符号,但对于存档古代文件很有用)。

因此,您无需处理数十种不同的字符编码,而是为所有字符使用一种编码(这也使得在单个文本字符串中混合来自不同语言的字符变得更容易,因为您不需要在文本字符串的中间)。实际上还有很多空间,我们还远远没有使用所有 2 个 mio 字符;Unicode 联盟可以轻松地为另外 100 种语言添加符号,甚至不用担心符号空间不足。

今天,您可以在图书馆中找到的几乎任何语言的任何书籍都可以用 Unicode 表示。Unicode 是编码本身的名称,它如何表示为“字节”是一个不同的问题。有几种写 Unicode 字符的方法,如 UTF-8(一到六个字节表示单个字符,取决于字符数,英文几乎总是一个字节,其他罗马语言可能是两个或三个,中文/日文可能更多) , UTF-16(大多数字符是两个字节,一些很少使用的是四个字节)和UTF-32,每个字符都是四个字节。还有其他的,但这些是占主导地位的。

Unicode 是许多较新的操作系统(在 Mac OS X 中几乎所有东西都是 Unicode)和编程语言(Java 使用 Unicode 作为默认编码,通常是 UTF-16,我听说 Python 也是如此,并将使用或已经使用 UTF- 32)。如果您打算编写一个应该显示、存储或处理纯英文文本以外的任何内容的应用程序,那么您最好习惯 Unicode,越早越好。

于 2008-10-21T16:05:42.227 回答
2

您无需学习 unicode 即可使用它,这是一个非常复杂的规范。您只需要了解主要问题以及您的编程工具如何处理它。要了解这一点,请查看 Galwegian 的链接以及您的编程语言和 ide 文档。

例如:

您可以将任何字符从 latin-1 转换为 unicode,但它不适用于所有字符。PHP 现在让您知道某些函数(如 stristr)不适用于 unicode。Python 以这种方式声明 unicode 字符串:u"Hello World"。

那是你必须知道的那种瘦。

知道这一点,如果您没有充分的理由不使用 unicode,那么就使用它。

于 2008-10-21T17:03:36.477 回答
1

Unicode 是一种枚举字符的标准,并为它们提供唯一的数字 ID(称为“代码点”)。它包括用于大多数现代书面语言的大量且不断增长的字符集,以及许多异国情调的东西,如古希腊乐谱。

与其他字符编码方案(如 ASCII 或 ISO-8859 标准)不同,Unicode 没有说明以字节表示这些字符。它只是为字符提供了一组通用的 ID。所以说 Unicode 是“ASCII 的 16 位替代品”是错误的。

有多种编码方案可以以字节为单位表示任意 Unicode 字符,包括 UTF-8、UTF-16 等。

于 2008-10-21T16:05:00.357 回答