表意文字

文字本身承载含义的文字系统。汉字是典型代表,在 Unicode 中作为 CJK 统一表意文字收录。

表意文字是指文字本身表达含义或概念的文字系统。汉字是最具代表性的表意文字,在中文、日文、韩文以及历史上的越南文中被共同使用。在 Unicode 中,作为 CJK 统一表意文字 (CJK Unified Ideographs),连同扩展区 A 至 J 合计收录了超过 10 万个汉字 (截至 Unicode 17.0)。在除去代理码位和私用区的已分配字符中,有六成以上属于这一汉字群,作为单一字符种类是最大的集团。

表意文字是与表音文字 (字母、平假名、韩文字母等) 相对的概念。表音文字把声音符号化,而表意文字直接把概念和含义视觉化。不过严格来说,汉字并非纯粹的表意文字,包含表音部分 (声符) 的形声字占了多数,因此也有语言学家认为称其为"表语文字 (logograph)"更为准确。

Unicode 的 CJK 统一表意文字,是把中国、日本、韩国和越南使用的汉字进行统一 (Unification) 后收录的。即使是相同的码位,也可能因语言或字体而字形不同。例如"直"字在日文字体和中文字体中会以微妙不同的字形显示。这一统一方针是 Unicode 设计上的重大争议点。人们容易误以为位于另一区块的 CJK 兼容表意文字 (CJK Compatibility Ideographs) 是解决字形差异的手段,但它是为了保持与既有字符编码之间的往返转换而准备的,并不是用于选择字形的机制。兼容表意文字的大部分在施加 Unicode 规范化 (NFC) 后会被替换为统一表意文字一侧的码位,因此一旦经过会做规范化的数据库或文件系统,区别就会丢失。若想明示字形,应采用在汉字之后附加异体字选择器 (U+E0100 至 U+E01EF) 的方式。不过这种方式下 1 个字会变成 2 个码位,因此在 JavaScript 的 length 中是 3,按码位单位是 2,按书写素单位是 1,值会随数法而变化。

表意文字的一大特征是能够跨越语言的壁垒传达含义。即使日本人和中国人不会说对方的语言,也能通过汉字笔谈进行大致的意思沟通,正是源于这一性质。另一方面,汉字的读音在不同语言中差异很大。"山"在日语中读作"yama/san",在中文中读作"shān",在韩语中读作"산 (san)"。

从计算机处理的角度来看,表意文字与表音文字相比存在若干课题。由于字符数量庞大,字体文件的体积会变大,影响 Web 字体的加载时间。此外,汉字的输入需要 IME (输入法编辑器),与可以直接从键盘输入的表音文字形成不同的用户体验。在 Web 字体方面,一般做法是用 unicode-range 分割为子集,只让浏览器加载包含实际使用字符的文件。从字节数的角度看,UTF-8 中 BMP 内的 1 个汉字占 3 个字节,BMP 之外 (扩展 B 及以后) 的汉字占 4 个字节。同属扩展区的扩展 A 位于 BMP 内,仍是 3 个字节。在不以字符数而以字节数设定上限的旧 API 或数据库列中,会发生一放入日语就只能装进预想的三分之一这样的落差。

从字符计数的角度看,表意文字 1 个字就能传达较多信息,因此相同内容用表意文字书写往往比用表音文字书写的字符数更少。英语中写作"internationalization" (20 个字符) 的内容,日语中用"国際化" (3 个字符) 就能表达。不过,这种信息密度未必能在社交媒体的输入框中直接转化为优势。X 的上限 280 是按加权方式计数的,汉字和假名 1 个字被当作 2 计算,因此日语实质上的上限是 140 字。虽然每个字的信息量更大、能塞进更多内容,但如果按照"可以使用与英语相同的 280 字额度"这一前提去实现剩余字数的显示,在日语输入时必定会出现落差。

分享这篇文章