关于Unicode,我需要了解什么?

时间:2008-10-21 15:55:21

标签: unicode internationalization

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

7 个答案:

答案 0 :(得分:45)

Unicode是一种标准,用于定义书面通信中使用的字形的数字代码。或者,正如他们自己说的那样:

  

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

开发人员承诺提供许多常见的,但很容易避免的编程错误,他们不打算自己教授Unicode及其编码。

您应该注意的一些关键概念是:

  • Glyphs - 用于表示书面字符的具体图形。
  • Composition - 组合字形以创建另一个字形。
  • Encoding - 将Unicode点转换为字节流。
  • Collation - 对Unicode字符串进行区域设置敏感的比较。

答案 1 :(得分:11)

冒着只添加其他链接的风险,unicode.org是一个非常壮观的资源。

简而言之,它是ASCII的替代品,旨在处理人类曾经使用的每个角色。 Unicode有几种编码方案可以处理所有这些字符 - UTF-8,现在或多或少是标准,每个字符的单个字节很难保留,并且与前7位的ASCII相同。

(作为附录,程序员之间存在一种流行的误解,如果你要进行国际化,你只需要了解Unicode。虽然这肯定是一种用途,但它不是唯一的。例如,我是在一个只会使用英文文本的项目上工作 - 但是有大量奇特的数学符号。将整个项目移动到完全Unicode解决了比我可以计算的更多问题。)

答案 2 :(得分:4)

Unicode是行业认可的标准,用于始终如一地表示能够代表世界角色系统的文本。所有开发人员都需要了解它,因为全球化越来越受到关注。

答案 3 :(得分:3)

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

答案 4 :(得分:2)

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

因此,不是处理几十种不同的字符编码,而是对所有字符编码都有一种编码(这也使得在单个文本字符串中混合来自不同语言的字符更容易,因为您不需要切换编码在文本字符串中间的某个地方)。实际上仍然有足够的空间,我们远未使用所有2个mio字符; Unicode Consortium可以轻松地为另外100种语言添加符号,甚至不用担心会耗尽符号空间。

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

Unicode是许多较新操作系统的默认编码(在Mac OS X中几乎都是Unicode)和编程语言(Java使用Unicode作为默认编码,通常是UTF-16,我听过Python也会这样做,并且会使用或已经使用使用UTF-32)。如果你打算编写一个应该显示,存储或处理除纯英文文本以外的任何应用程序的应用程序,你最好习惯Unicode,越快越好。

答案 5 :(得分:1)

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

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

有各种编码方案可以用字节表示任意Unicode字符,包括UTF-8,UTF-16等。

答案 6 :(得分:1)

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

E.G:

您可以将任何字符从latin-1转换为unicode,但对于所有字符,它不会以其他方式工作。 PHP现在允许您使用某些函数(如stristr)与unicode不兼容。 Python以这种方式声明unicode字符串:u“Hello World”。

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

知道如果你没有使用unicode的好理由,那就使用它吧。