这16门语言都有语言代码,写它们的那14套文字一个码位都没有

这16门语言都有语言代码,写它们的那14套文字一个码位都没有
张文保 40 分钟阅读 3,168 阅读
本文目录
  1. 一门语言有了代码,为什么它的文字可能还没有?
  2. 这是两套完全独立的编号体系
  3. 先把三个容易混的概念分开
  4. 本文的口径与截止时点
  5. 文字这一层的清单,一共有多少格?
  6. 226个代码,168套真正被编码
  7. 跟语言那一层比,这是一份极短的清单
  8. 共用带来的一个副作用
  9. 这个清单是一直在长的
  10. 为什么2014年那一版一次进了23套
  11. 有代码却没有码位的,是哪39个?
  12. 先把不该算的剔掉
  13. 27套里,10套只服务已经不说的语言
  14. 剩下14套,写的是今天还在用的语言
  15. 代码表里为什么会有托尔金造出来的文字?
  16. 先说那6个占位码
  17. 再说那6套虚构文字
  18. 剔除动作本身就是一个判据
  19. 那14套文字背后,是16门今天还在用的语言
  20. 逐条核对的结果
  21. 这份名单是怎么核出来的,以及第一版怎么错的
  22. 使用规模最大的那几门
  23. 为什么这批文字集中在几个特定区域
  24. 卡住的到底是排队,还是没有人在推?
  25. 开工前的预期是排队很久
  26. 真正排过队的只有35套,中位数1年
  27. 那39条先有码位后有代码的说明了什么
  28. 没进队的意思是没有人提交提案
  29. 提案里最难的不是列字符
  30. 有一份公开的管线可以查进度
  31. 官方那份未支持清单,为什么只列了两套?
  32. 官方清单上的现代文字只有两套
  33. 更值得注意的是分栏方式
  34. 这条对怎么用官方文档是一个提醒
  35. 一套文字要过几道闸,才算能在网上当字用?
  36. 四道闸,缺一不可
  37. 四道闸各自由谁把守
  38. 第三道和第四道,本站量过
  39. 怎么快速查一门语言过到了第几道
  40. 还有一个更快的粗筛
  41. 没有码位的文字,今天怎么出现在网页上?
  42. 三种办法,各有各的代价
  43. 私有区这个办法为什么危险
  44. 那正确的做法是什么
  45. 保哥这次的预期错在哪几条?
  46. 错的第一条:以为是排队
  47. 错的第二条:以为官方清单是全的
  48. 错的第三条:以为没码位的都是死文字
  49. 对了的一条
  50. 这件事对做小语种SEO的人有什么用?
  51. 用法一:进一个新市场之前先查第二道闸
  52. 用法二:把码位当成内容形态的分界线
  53. 用法三:这套读法可以搬到别的标准上
  54. 用法四:给这件事一个合理的优先级
  55. 常见问题解答
  56. 没有码位的文字,我可以自己申请吗?
  57. 这14套文字的名单会变吗?
  58. 我的页面上放了这类文字的图片,替代文本该怎么写?
  59. 私有区方案真的一点都不能用吗?
  60. 页面上同时出现两套文字,语言标签该怎么写?
  61. 怎么知道我的目标市场用户实际用哪套文字?
  62. 为什么语言代码和书写系统代码是两套体系?
  63. 权威参考资料

摘要:一门语言拿到语言代码和它的文字拿到码位,是两道分开的闸。把226个书写系统代码跟Unicode16.0的168套已编码文字对了一遍:39个代码至今没有码位,剔掉占位码和虚构文字之后还剩27套真实文字,其中14套是今天仍在使用的语言在用的。这14套背后的16门语言,全部有语言代码。更意外的是等待时长——真正排过队的只有35套,中位数1年,最长5年。卡住的那批不是在排队,是根本没有人提交提案。

先说一个具体的场景。你接了一个尼泊尔市场的项目,用户群里有相当一部分是尼瓦尔人,你想在页面上放一句他们自己文字写的问候语。

查语言代码,有,尼瓦尔语在册,代码规规矩矩。查这门语言用什么文字写,答案是一种叫兰札的字体。再查这套文字在Unicode里的位置——没有。

不是查不到,是没有。这套文字有自己的国际书写系统代码,编号303,代码是四个字母,2021年正式分配。但它至今没有分到任何一块码位,也就是说你在键盘上、在数据库里、在任何一个纯文本字段里,都打不出这套字。

上一篇数了替一门语言申请代码的是谁(616份申请书里过半出自同一个组织)。这一篇要问的是同一件事的另一半:语言那道闸过了,文字这道闸过了吗。

结论可以先摆出来:这两道闸的通过情况并不同步,而且不同步的方向出人意料——文字那道闸的流程其实比语言那道快,卡住的地方不在审批,在没有人去提。

一门语言有了代码,为什么它的文字可能还没有?

这是两套完全独立的编号体系

语言有语言的编号,文字有文字的编号。前者是三个小写字母,后者是四个字母首字母大写。它们由不同的标准维护,走不同的申请流程,各有各的注册机构。

你在页面上写的语言标签里,这两样有时会同时出现。中文的两种写法就是典型:语言部分相同,后面跟的书写系统部分不同。多数人以为那是同一份表里的两列,其实是两份表。

更关键的是:文字有编号,不代表它能被打出来。编号只是标准里给它留了一个名字,码位才是它在计算机里有没有身体。这两件事之间还隔着一道完全独立的流程。

这一层的规矩本站在讲语言标签的时候提过一次(结构化数据里的语言字段该怎么写),但那一篇讲的是怎么写,这一篇要问的是写了之后能不能用。

顺带说清楚一个常见误解:书写系统代码不是给你在页面上随便标着玩的。语言标签的规则里明确写着,只有当这门语言确实用多套文字书写、而且需要区分的时候才该带上它。中文、塞尔维亚语、乌兹别克语属于该带的,德语法语属于不该带的。

先把三个容易混的概念分开

第一个是书写系统代码。它回答的是这套文字在国际标准里叫什么、编号多少。目前一共226个。

第二个是码位。它回答的是这套文字的每一个字符在计算机里对应哪个编号。这一层由另一个组织负责,走的是提案、评审、投票的流程。

第三个是字体。有码位不代表你的设备上有字形,缺字形的表现是屏幕上一串方块。这一层跟前两层又是分开的,本站量过字体子集在首屏上的成本,那是第三层的问题。

这一篇只处理前两层的关系:有编号但没码位的,有多少,都是些什么。

还有一层比字体更靠后,就是输入法。这一层放在后面单独讲,因为它是四道闸里最容易被整个忘掉的一道。

本文的口径与截止时点

书写系统代码表取的是完整的一份,最新一条分配于2025年4月。码位那一侧取的是Unicode16.0这一版,也就是当前的正式版本。

这个口径要说清楚,因为这两份表都在动。今天没有码位的文字,明年可能就有了;下一版发布之后,这一篇里的39这个数字就会变。所以这一篇给的不是一份长期名单,是一张某个时点的快照,真正可复用的是读这张表的方法。

不量字体覆盖,不量输入法,不量这些文字在实际内容里的使用量。前两样是另外两层,最后一样没有可靠的公开数据。

也不做趋势预测。哪一套文字下一版会进去,管线表上写着的比任何推测都准,文中会给查法。

文字这一层的清单,一共有多少格?

226个代码,168套真正被编码

书写系统代码表拉下来数一遍:一共226个代码。每一条带四样东西——四字母代码、三位数字编号、英文名、法文名,另外还有两列是Unicode那边的属性值和版本号。

带版本号的187个,也就是说这些文字已经进了Unicode,而且能查到是从哪一版开始进的。不带版本号的39个,占17.3%。

另一边,Unicode16.0这一版实际编码的书写系统是168套。这两个数对不上,差19个,原因是代码表里有一批是变体码和组合码——同一套文字的不同写法、两套文字的组合、以及几个纯粹的元代码。

做了一次交叉核对:代码表里带Unicode属性值的172个,跟实际编码的168套比,差的4个全是元代码,而反过来在Unicode里有、代码表里查不到的是0个。两份表零漏,可以放心互推。这一步是必须做的,否则后面所有对差都不可信。

跟语言那一层比,这是一份极短的清单

语言那一层在册7929门。文字这一层只有226个代码、187个有码位。

平均每38门还在使用的语言,共用一套有码位的文字。这个比例说明了一件常被忽略的事:文字是被大量共用的,绝大多数语言并不拥有自己的文字。

拉丁字母一套就覆盖了几千门语言,西里尔字母、阿拉伯字母、天城文各自覆盖上百门。所以文字这一层的空白,影响面反而比语言那一层的空白更大——一套文字缺席,可能同时卡住好几门语言。

反过来也有语言拥有多套文字的情况,印度那边尤其多,本站在印度十一门语言九种文字那一篇里算过这笔账。

共用带来的一个副作用

文字被大量共用,还带来一个做词表时会遇到的具体问题:同一套文字里,不同语言用的字符子集不一样。

拉丁字母是最典型的。基础26个字母之外,越南语要六种声调符号的组合,波兰语要带尾钩的字母,土耳其语要那个不带点的i。这些字符各自属于不同的码位区间,有的在基本区,有的在扩展区。

结果就是:你的系统支持拉丁字母,不等于它支持这门用拉丁字母的语言。支持一套文字和支持一门语言,中间还差一个字符子集的距离。本站在讲大小写折叠的时候写过这类坑最典型的样子。

这个清单是一直在长的

按版本号数一遍每一版新增了多少套文字:最早那一版一次进了36套,那是存量。之后三十年里,2014年那一版一次进了23套,是第二个高峰,其余每版通常是2到7套。

把2010年之后的加起来:187套已编码文字里,有79套是2010年之后才拿到码位的,占42%。

换句话说,文字进Unicode这件事不是一段已经完成的历史,是一项还在进行的日常工作。四成的文字是最近十几年才进去的,这个速度还在继续。

这一条对做技术选型的人有直接含义:你的系统如果还在用十几年前的字符集假设,那批新进来的文字它一个都不认识。

具体会怎么表现?不是报错,是静默的降级:搜索搜不到、排序排不对、截断截在半个字符中间。这类问题的共同特征是不报警,得靠人去发现。本站量界面上哪些文案没被翻译的时候遇到的是同一种失效方式:出错提示和空状态排在队尾,而它们恰恰是用户最需要看懂的那一批。

为什么2014年那一版一次进了23套

翻一下那一版的时间点,2014年前后正是几个大型文字编码项目集中结题的时候。二十多套文字同时被推进同一版,不是因为那年发现了二十多套新文字,是因为几个提案的进度正好撞在了一起。

这条曲线跟上一篇那条语言申请量曲线是同一个形状:它量的不是世界上还剩多少套文字没编码,是那几年有多少人在做提案。产能由人决定,不由需求决定。

这个形状值得做内容排期的人记一下。任何一份由少数人产出的公开数据,它的时间曲线首先是这些人的工作日程,其次才是外部世界的变化。

有代码却没有码位的,是哪39个?

先把不该算的剔掉

39个里有6个是特殊占位码:两个用来划定私有使用区间的起止码,还有四个元代码,分别表示未确定的文字、未编码的文字、继承上文的文字、以及无文字内容。这几个从设计上就不会有码位。

还有6套是虚构或人造的文字:托尔金给中土世界造的三套、某部科幻剧集里外星人用的一套,以及两套二十世纪发明的符号系统。这几套有代码,是因为确实有人在用它们排版和出版,但它们跟语言使用者社群没有关系。

剔掉这12个,剩下27套是真实存在过或正在被使用的文字。这27套才是这一篇要看的名单。

顺带说,剔除这一步不能省。如果照39这个数直接写,会得出一个偏高的结论,而且里面混着两个私有区间码——那两个恰恰是解决没有码位这个问题的临时办法,把它们算进问题本身就闹笑话了。

27套里,10套只服务已经不说的语言

把这27套逐条查它写的是哪门语言,再回到语言码表里看那门语言的状态。

10套对应的语言在册状态是历史语言或已灭绝:女真文、契丹大字、书体钵罗钵文、西德文、埃及世俗体、玛雅圣书体、印度河文字、原始楔形文字、原始埃兰文字,以及一套至今没有确定对应语言的早期字母。

这一批的缺席对做内容的人没有影响。它们的使用者是研究者,需求是在论文和数据库里精确引用,而这类需求通常用图片或者专门的转写方案就能满足。

另有1套不对应任何单一语言:那是给视障者用的一套触觉文字,跟盲文是两个体系,十九世纪发明,今天在英国仍有少量使用。

这一套单独拎出来说一句:它没有码位,但它的实际使用场景是凸起的实体印刷,不是屏幕。一套文字要不要码位,取决于它有没有在数字环境里被使用的需求,不取决于它有没有人用。这条判据能解释这份名单里的不少条目。

剩下14套,写的是今天还在用的语言

这14套是这一篇真正的名单。按代码分配的年份排:

西非两套——克佩勒文和洛马文,2010年分配代码。苏里南一套——阿法卡文,同年。密克罗尼西亚一套——沃莱艾文,同年。

缅甸泰国交界一套——勒克文,2015年。中国三套——纳西东巴文、纳西哥巴文、水书,2017年同一天分配。

尼泊尔一套——兰札文,2021年。印度两套——托隆西基文和奇索伊文,分别在2021年和2023年。越南一套——傣约文,2023年。乍得和苏丹交界一套——贝里亚埃尔菲文,2025年1月,是全表最新的一条。

还有一套年代最早:复活节岛的朗格朗格文,2004年那批存量登记里就有它,二十一年过去仍然没有码位。

这一套的情况特殊:它至今没有被完全释读,学界对它的字符总数、字符边界甚至书写方向都还有分歧。而Unicode提案的第一项要求就是给出完整的字符清单。释读不完,这一条就永远满足不了。

这是这份名单里唯一一类靠时间和资源都解决不了的:不是没人推,是推不动。剩下那些的障碍是人力,这一套的障碍是知识本身还不够。

把这两类分开是有意义的。人力型的空白,只要有一个机构立项就能在两三年内填上;知识型的空白,投再多钱也没用,得等学界先有共识。做规划的时候把这两类混在一起,会对时间做出完全错误的估计。

代码表里为什么会有托尔金造出来的文字?

先说那6个占位码

39个没有码位的代码里,有6个从设计上就不该有码位,它们是留给系统用的。

两个是私有使用区间的起止标记,中间那一段编号谁都可以拿去自己用,标准不管里面装什么。四个是元代码:一个表示这段文字的书写系统未确定,一个表示未编码,一个表示继承上文,还有一个表示这份文档里根本没有文字内容。

这四个元代码在实际系统里用得比想象中多。你的内容管理系统给一条只有数字和标点的记录打标签时,用的往往就是那个表示无文字内容的代码。

把它们算进没有码位的文字里是一个典型的统计错误。一份代码表里通常混着两类东西:真实对象的编号,和给系统留的槽位。做统计之前必须先把后者剔掉。这条在语言码表那边同样成立,上一篇提过在册表里也有几个特殊代码。

再说那6套虚构文字

剩下的12个里有6套是被人凭空造出来的:托尔金为中土世界设计的三套字母、一部科幻剧集里外星种族用的一套、一套二十世纪中期发明的图形符号系统,还有一套十九世纪为语音教学设计的记音符号。

它们有代码,理由很实在:确实有人用它们排版、出版、做研究。给它们一个编号,图书馆的编目系统才能标注这本书是用什么文字印的。

有意思的是这几套里有一套后来拿到了码位,另外几套至今没有。拿到码位的那套背后有一个组织在做提案,其余几套没有。又是同一条规律:跟这套文字有多少人用关系不大,跟有没有人替它办手续关系很大。

这几套的存在还提醒了一件事:编号本身不承诺使用者社群的存在。你在任何一份标准清单里看到一个条目,不能反推出背后有多少人。这条对做市场评估的人是硬提醒,因为清单是最容易被当成需求证据的东西。

剔除动作本身就是一个判据

39减掉6个占位码、再减掉6套虚构文字,得到27套真实文字。这一步的减法比那个39更重要。

如果不做这一步,直接拿39去写,会得出两个错误:一是高估了问题的规模,二是把私有使用区间算进了问题本身——而私有区恰恰是这个问题的临时解法之一。把解法算成问题,是统计里最尴尬的一类错误。

做数据的人可以把这一步固化成习惯:任何一份清单在做加减之前,先问里面有几类不同性质的条目。清单越权威,混着的类别往往越多,因为权威清单要照顾的用途也多。

本站在数语言那一层的时候做过同样的动作,在册的七千多门里要先分出在用、灭绝、历史、人造几类,不同的问题该用不同的分母(语言代码注销那一篇里那张分类表就是干这个用的)。

那14套文字背后,是16门今天还在用的语言

逐条核对的结果

把这14套文字对应的语言逐条查回语言码表,得到16门标着在用的语言:三门克佩勒语、两门洛马语、东马龙克里奥尔语、沃莱艾语、纳西语、水语、尼瓦尔语、霍语、扎加瓦语、傣端语、两门克伦语、拉帕努伊语。

这16门语言全部有语言代码,而且全部标着在用。语言那道闸它们都过了,卡住的是文字那道闸。

这个对照是这一篇的核心。它把一个看起来很技术的问题变成了一个很具体的问题:这些语言的使用者可以在任何一份国际清单里被登记、被统计、被写进语言选择器,但他们没法用自己的文字在网上打一个字。

换个说法更直白:语言那道闸管的是这门话算不算数,文字这道闸管的是这套字能不能敲出来。前者是身份问题,后者是能力问题,而做内容的人真正会撞上的是后者。

要说明的是,这些语言绝大多数还有另一套文字可以用。纳西语可以用汉字或拼音写,尼瓦尔语可以用天城文写,克伦语有拉丁化方案。所以这不是不能上网的问题,是那套文字上不了网的问题。

这份名单是怎么核出来的,以及第一版怎么错的

第一版核对用的是名字匹配:拿文字的英文名去语言码表里搜同名的语言。跑完一看,托隆西基文匹配到153门语言,傣约文匹配到42门,那套触觉文字匹配到22门。

原因很好笑。托隆西基文写的是霍语,英文名是两个字母,于是所有名字里带这两个字母的语言全被捞了进来。傣约文那个词是傣,东南亚一大片语言名里都有它。

凡是靠名字匹配建立的对应关系,都必须逐条回原表核对。本工程在别处已经吃过这个亏:做外链清单的时候有一轮87条链接里11条对不上,也是靠逐条回核才发现的。这一次的代价小,因为异常值大到一眼能看出来;真正危险的是那种匹配到两三门、看起来很合理的假阳性。

最终这张表是人工逐条指定语言代码之后核出来的,14套文字对16门语言,每一条都能追到具体的三字母代码,代码本身再拿ISO 639-3的完整码表回查一遍在册状态。

使用规模最大的那几门

这16门里有几门的使用者规模并不小。霍语在印度东部有上百万使用者,是宪法附表之外使用人数最多的语言之一。克伦语在缅甸和泰国边境有数百万人。尼瓦尔语在加德满都谷地有几十万。

这里必须谨慎:使用人数这个数字的来源问题,上一篇已经讲过——它多半来自某个申请人在某一年填的一个约数,不同语言之间不可比。所以这里只说量级,不给精确值。

但即使按最保守的量级看,这14套文字背后也是几百万人。这个规模足以说明,文字没有码位不是一个只影响几个研究者的边缘问题。

另一头也确实有很小的:沃莱艾文的使用社群只有几千人,阿法卡文更少。规模差异很大,共同点只有一个——都还没有码位。

为什么这批文字集中在几个特定区域

把这14套的地理位置摆开:西非三套、东南亚三套、中国三套、南亚三套、大洋洲两套。

这个分布跟上一篇那份语言申请的国家分布高度重合,原因也一样——这些地方的文字多样性高,而当地没有把文字编码列进职责的机构。

唯一的例外是中国那三套。纳西东巴文和水书在国内都有正式的研究机构和保护项目,学术资料不缺。缺的是把这些资料转成一份符合Unicode要求的技术提案的那个动作——那是另一套完全不同的专业能力,跟古文字研究本身不是一回事。

还有一个共同点:这14套里有相当一部分是十九世纪或二十世纪由本地人自己发明的文字,为的是给一门原本没有文字的语言创造书写方式。这类文字的社群通常很坚定,但规模小、缺乏学术资源,恰好最难凑齐一份合格的提案。

卡住的到底是排队,还是没有人在推?

开工前的预期是排队很久

保哥开工前的预期很直接:这些文字大概是在排队。Unicode那边的评审流程很严格,提案要经过技术委员会和国际标准组织两轮,慢是正常的。

于是去算等待时长:拿每套文字的代码分配年份,减去它进Unicode的版本发布年份,看中间隔了几年。

2004年那批是标准发布当天的存量一次性登记,42条,不计等待。剩下逐条分配的145条,结果跟预期完全不一样。

真正排过队的只有35套,中位数1年

145条里,先有代码后进Unicode的只有35条。这35条的等待时长中位数是1年,最长的是契丹小字,5年。

另外71条是同一年拿到代码和码位的。还有39条更有意思——它们是先进了Unicode,之后才补的书写系统代码,也就是说码位那一侧走在了编号那一侧前面。

把这三档合起来看:这条流程的实际速度是很快的。一套文字一旦有人认真提案,通常一两年之内就能拿到码位,超过5年的一个都没有。

所以那27套卡住的文字不是在队伍里排着。队伍很短,而且走得很快。它们根本没进队。

那39条先有码位后有代码的说明了什么

145条里有39条是反过来的:先进了Unicode,之后才补的书写系统代码。

这个顺序初看很奇怪——按理说应该先在标准里登记名字,再申请码位。实际情况是两套体系各自独立运行,而做码位提案的人和做代码登记的人常常不是同一批,所以谁先谁后取决于谁先想起来。

还有71条是同一年拿到两样的,那是有人一次把两边的手续都办了。三档合起来看,这两道闸之间没有强制的先后关系,也没有任何机制保证办了一边就会办另一边。

对用数据的人来说,这条的含义是:不能拿有没有书写系统代码去推断有没有码位,反过来也不行。两份表必须各查一次。

这条听起来琐碎,但它是这一篇能成立的技术前提。如果两套体系是同步的,这一篇根本不存在——有代码就有码位,没什么可写的。正因为它们各自独立,中间那个差集才有意义。

没进队的意思是没有人提交提案

这条流程的起点是一份提案:要给出这套文字的全部字符、字符之间的关系、排序规则、实际使用的样本,通常还要附上使用者社群的意见。

这份提案的工作量比语言代码申请大一个数量级。语言代码申请是三五页表格,文字提案是一份几十页的技术文档,要有字符表、有字形样例、有编码模型的论证。

提案里最难的不是列字符

列字符表反而是相对机械的一步。真正难的是编码模型:这套文字里哪些是独立字符、哪些是变体、哪些是组合出来的,得给出一套自洽的说法。

举个具体的难点。很多文字里同一个音有好几种写法,取决于它在词里的位置。这些写法要算成一个字符加上下文规则,还是算成几个独立字符?这个决定会影响排序、搜索、大小写折叠的全部行为,而且一旦定下来几乎不可能改。

这就是为什么提案要几十页,也是为什么它需要一个既懂这套文字、又懂字符编码模型的人。这两种知识很少长在同一个人身上,而提案要求它们同时在场。

顺带说,这个难点跟做内容的人遇到的一类问题同构:给一个品类建属性表的时候,哪些算独立属性、哪些算某个属性的取值,这个决定同样会一路影响到筛选器和搜索。定错了以后改,成本是重建。

能做这件事的人比能填语言申请表的人还少。加州大学伯克利分校有一个专门的项目在做这件事,它的存在本身就说明了问题——如果这件事有足够多的人自发在做,就不需要一个专门的项目来推。

这跟上一篇的结论是同一条:办得成办不成,取决于有没有一个具体的人愿意去办那份手续。只是文字这一层的手续更重,所以空白更持久。

有一份公开的管线可以查进度

Unicode那边维护着一份待编码字符的管线表,已经被接受、正在走流程的提案都在上面,能看到每一项走到哪一步了。

用法很简单:你关心的那套文字如果在管线里,说明有人在推,等就是了;如果不在,说明这件事还没开始,等多久都不会有结果。

这里补一个实操细节:管线表里的条目分几个阶段,从被技术委员会接受、到进入国际标准投票、到确定进哪一版。看到一套文字出现在表上还不够,要看它走到了第几阶段。刚被接受和已经确定版本号,中间可能还差两三年。

这个判据比看新闻可靠。一套文字被媒体报道过不代表提案在走,很多报道说的是某个学者在做研究,而研究和提案之间还隔着好几年。

管线表还有一个用法:看一套文字在里面停了多久。已经进表但好几版都没动的,通常是卡在了某个技术分歧上,比如字符边界怎么切、某几个符号算不算独立字符。这类分歧解决起来比补材料慢得多。

官方那份未支持清单,为什么只列了两套?

官方清单上的现代文字只有两套

Unicode官网上有一页专门列还没被支持的文字,分成两栏:一栏叫现代文字,一栏叫古代和废弃文字。

现代文字那一栏只列了两套:洛马文和纳西东巴文。

而按代码表跟码位表对差算出来的,今天仍在使用的语言所用的、没有码位的文字是14套。官方清单只列了其中两套,差7倍。

这不是官方藏着什么。这一页最后一次实质更新是好几年前的事,页面本身也标注过它已经不再用于跟踪状态。它不是错的,是旧的。

这类页面在大机构的网站上很常见。一个页面建立的时候有人维护,后来职责转移了、工具换了,页面留在原地。它不会被删掉,因为删掉会破坏外部链接;但也不会被更新,因为没有人的KPI里写着这件事。

对使用者来说,最危险的不是错误的页面,是停更的页面——它每一句话在当年都是对的。

更值得注意的是分栏方式

把兰札文放在古代和废弃那一栏里,这一条能说明不少东西。

兰札文写的是尼瓦尔语。尼瓦尔语在语言码表里标着在用,在加德满都谷地有几十万使用者,这门语言本身完全不是古代语言。这套文字今天主要用于宗教文本、招牌和装饰,使用场景确实窄了,但它有活着的使用社群。

这就出现了一个分类上的错位:语言那一侧判它在用,文字这一侧判它废弃。两套体系对同一件事给出了不同的答案,而它们各自都有道理。

做内容的人遇到这类分歧的时候,判据应该是需求侧而不是标准侧:你的目标用户会不会用这套文字搜索、会不会在这套文字的内容上停留。标准里怎么归类不影响这个答案。

这跟本站反复讲的那条是一回事:标准里的地位和市场里的活跃度是两个东西,前者不能当后者的代理指标。上一篇用裁决书的词频证过一次,这一篇用分栏方式又证了一次。

这条对怎么用官方文档是一个提醒

一份挂在官方域名下的清单,可信度通常被默认为最高。但清单和规范是两种东西:规范改动有流程、有版本号,清单往往是某个人在某一年整理的,之后没人再动。

判据可以固化一下:凡是清单类的页面,先找它的更新时间;找不到更新时间的,用它前先拿一份原始数据对一次。这一篇的14套就是这么对出来的,用的是官方自己发布的两份机器可读文件。

本站在别的地方也用过这条。做小语种页面审计时,很多所谓的官方支持语言清单跟实际能用的语言对不上,最后都得回到原始数据文件去数(三家系统的界面语言清单)。

一套文字要过几道闸,才算能在网上当字用?

四道闸,缺一不可

第一道:书写系统代码。这决定了它在标准里有没有名字,是后面所有事的前提。目前226套过了这一道。

第二道:Unicode码位。这决定了它能不能被存成文本。187套过了这一道。

第三道:字体字形。有码位但没有字形,屏幕上是方块。这一道由字体厂商和开源字体项目决定,跟前两道完全无关。

第四道:输入法。有字形但打不出来,用户只能复制粘贴。这一道通常最晚到,而且经常没人负责。

四道闸是串联的,任何一道没过,用户那一端的体验都是这套文字不能用。而做技术选型的人常常只查了第二道就以为万事大吉。

四道闸各自由谁把守

第一道和第二道由国际标准组织把守,流程公开、有档案、能查进度。这两道虽然慢,但至少是可预期的。

第三道由字体厂商和开源字体项目把守。这一层没有承诺,一套文字有没有可用字体,取决于有没有人愿意做,以及有没有钱做。

第四道由操作系统厂商和输入法开发者把守。这一层连一份公开清单都没有,你只能自己拿设备去试。

四道闸的可预期性是递减的,而对用户体验的影响是递增的——用户不关心码位,他只关心能不能打出来。

第三道和第四道,本站量过

字体这一道,问题通常不在有没有,在字形集有多全和文件有多大。一套覆盖完整的非拉丁字体动辄几百KB到几MB,直接影响首屏。这笔账在字体子集那一篇里算过。

输入法这一道更隐蔽。一门语言的正字法要求某几个字符,而当地主流键盘布局上没有这几个键,用户就会用形近字符替代,你的关键词表里就会出现两套写法。这类情况本站在讲波斯语的时候写过(两个常用字母各有两个合法码位)。

把四道闸摆在一起看会发现一个规律:越靠后的闸,越没有一个明确的责任方。标准组织管前两道,第三道靠字体项目,第四道靠操作系统厂商和输入法开发者,而这两类主体都不对小语种负有义务。

怎么快速查一门语言过到了第几道

给一套可以在半小时内跑完的动作。

第一步,查这门语言用什么文字,拿到那套文字的四字母代码。第二步,在书写系统代码表里搜这个代码,看有没有Unicode版本号——有,说明第二道过了;空着,后面三道不用查了。

第三步,在自己的设备上打开一段这套文字的样本文本,看是不是方块。第四步,试着在系统的输入法设置里找这门语言,看能不能装上。

第三步有个坑要提醒:你自己的设备上能显示,不代表用户的设备能显示。开发者的机器通常装了一堆字体,判断显示情况要用干净环境,或者直接查这套文字在主流系统默认字体里的覆盖情况。

第四步也一样。你能在设置里找到并装上,不等于目标市场的用户会去装。输入法这一层的正确问法不是能不能装,是当地人默认装的那套键盘上有没有它。

四步做完,你知道这个市场的内容能做到什么程度。第二道没过的,页面上只能放图片,搜索引擎抓不到一个字。

还有一个更快的粗筛

如果懒得走四步,有个一分钟的粗筛:在搜索引擎里用这套文字搜一个常见词,看返回结果里有没有真正用这套文字写的网页。

返回的全是介绍这套文字的百科条目和学术论文、而不是用它写的内容,基本可以判定这一层没打通。这个判据不严谨,但很少判错,因为一套真正能用的文字必然会有人拿它写日常内容。

反过来如果搜出来一堆本地网站,那说明前三道闸至少是通的,剩下要查的只有输入法那一道。

没有码位的文字,今天怎么出现在网页上?

三种办法,各有各的代价

第一种是图片。把文字排好版截成图放上去。这是最常见的做法,代价是这些内容对搜索引擎完全不可见,对读屏软件也不可见。

第二种是私有使用区。字符集里预留了一大块没有分配含义的码位,谁都可以往里塞自己的字符。做一套字体,把字形挂在这些码位上,装了这套字体的设备就能正常显示。

第三种是转写。用另一套已有码位的文字把它写出来,比如用拉丁字母转写。这是唯一一种搜索引擎能读的方案,代价是它已经不是原来那套文字了。

转写这条路本身也有讲究。同一套文字常常有好几套互不兼容的转写方案,学界一套、政府一套、民间还有一套。选错了转写方案,你的内容跟用户搜的词照样对不上,本站在讲希腊语的时候写过这类情况的完整形态(拉丁转写的覆盖问题)。

判据是:选用户实际在打的那一套,不是选最规范的那一套。这两者经常不是同一个。

私有区这个办法为什么危险

私有区的字符在标准里没有含义,含义由使用它的那套字体私下约定。这意味着同一串字节,换一台设备、换一套字体,显示出来可能是完全不同的东西,也可能是一串乱码。

更麻烦的是搜索和排序全部失效。搜索引擎看到的是一串没有语义的码位,没法分词、没法建索引、没法做同义扩展。内容存在,但在检索这一层等于不存在。

还有一个长期风险:等这套文字将来真的拿到了正式码位,所有用私有区存的历史内容都要做一次迁移,而迁移映射表往往已经找不到了。

迁移这件事的难度还常常被低估。私有区方案通常不是一家做的,同一套文字可能有三四个互不兼容的私有映射,各自服务于不同的字体。迁移的时候你得先判断这段字节用的是哪一套映射,而这个信息一般没有被记录下来。

这个剧本本站写过它的完整版。有一门语言曾经全网通行一套非标准编码,官方标准化之后花了好几年才换过来,而当年那批用旧编码的页面今天基本上一条都打不开。另一个语系的编码遗留也是同样的形态,只是发生得更早。

那一次的教训里最值钱的一条是:编码迁移的成本不在转换脚本上,在判断每一份历史数据当初用的是哪一套编码上。转换本身是几行代码,判断是个考古工作。

那正确的做法是什么

如果第二道闸没过,保哥的建议是三条一起用。

正文用有码位的那套文字或者转写方案写,保证搜索引擎能抓、能索引、能匹配查询。这是流量的来源,不能省。

那套没有码位的文字用图片呈现,放在品牌表达、标题装饰、文化元素这些位置上,并且一定要配替代文本。替代文本写的是这段文字的意思和转写,不是这是一张图片。这一层怎么写本站量过(非拉丁文字的替代文本)。

还有一个容易漏的位置:结构化数据。你在页面上用图片展示的那个名称,在结构化数据里要写成能被机器读的形式,也就是转写或者另一套文字的写法。图片里的字对机器完全不存在,而结构化数据是它唯一能拿到这个信息的地方。

不要用私有区。省下的那点排版便利,抵不上内容在检索层消失的代价,更抵不上将来迁移的成本。

保哥这次的预期错在哪几条?

错的第一条:以为是排队

前面讲过了,实测的等待中位数只有1年。这条错得最彻底,而且它改变了整篇文章的结论方向。

如果真的是排队,结论会是流程太慢、应该扩容评审力量。实测之后结论变成了:流程不是瓶颈,提案供给才是瓶颈。这两个结论对应的行动完全不同。

这条也让这一篇跟上一篇接上了。上一篇的结论是语言代码那道闸卡在有没有人填表,这一篇的结论是文字这道闸卡在有没有人写提案。两道闸,同一个瓶颈。

两篇合起来,那条原语可以写成一句话:一门语言在标准体系里的身份,是被人一件一件办出来的,而办事的人极少。这句话解释了这个体系里几乎所有的空白,也解释了为什么这些空白不会自己消失。

错的第二条:以为官方清单是全的

开工时的计划本来是直接引用官方那份未支持清单,省掉自己对差的功夫。列出来两套,跟预期的几十套差太远,才回头去做交叉。

做完才知道官方那份清单已经好几年没更新。如果照着它写,这一篇会得出一个乐观得多的结论:只有两套文字还没被支持,这件事基本上做完了。

错的第三条:以为没码位的都是死文字

第三个预期是这批文字应该主要是考古材料,跟现代市场没关系。

实测是27套里14套服务于今天还在用的语言,比例超过一半。而且里面有使用者上百万的语言。

这条错的根源是把文字的知名度当成了它的活跃度。一套文字在中文互联网上查不到多少资料,不代表用它的人少,只代表写中文资料的人没去过那里。这个偏差跟本站量过的低资源语言在模型里的表现是同一个来源。

这个偏差有一个很实用的推论:你能查到多少资料,反映的是有多少人写过它,不是它本身有多大。做市场调研的时候,资料的丰富程度只能当作研究成本的指标,不能当作市场规模的指标。

两者甚至常常是反的。一个资料丰富的市场通常意味着已经有很多人研究过、进去过、竞争过;一个查不到资料的市场,可能只是还没人写中文介绍。

对了的一条

唯一猜对的是两份表能对得上。开工前判断这两份官方数据应该是同步维护的,实测交叉核对下来差的4个全是元代码,反向漏0个。

这条虽然不刺激,但它是整篇文章成立的前提。如果两份表对不上,后面所有的对差结论都是噪声。做交叉分析之前先验证两个数据源能不能互推,这一步不能省。

这件事对做小语种SEO的人有什么用?

用法一:进一个新市场之前先查第二道闸

动作前面给过了,两步就能查完。查的成本几乎为零,不查的代价是排期做到一半才发现内容形态得整个换。

真正会踩到这一条的场景不多,但一旦踩到就是硬伤。涉及少数民族市场、宗教文本、文化类目、以及某些南亚东南亚的细分市场时,值得多花这五分钟。

还有一类场景容易被忽略:做文化类目的商品,比如手工艺品、宗教用品、地方特产。这类商品的名称、图案、包装上常常带着当地文字,而这些文字未必有码位。你在商品标题里想写那个名字,可能根本写不出来。

更常见的是半踩:主流文字有码位,但这门语言正字法要求的某几个附加字符是后来才加进去的,老系统不认。这种情况比整套文字缺席常见得多。

这类半踩的典型症状是:页面在新设备上完全正常,在某些老终端或者某个第三方系统里有几个字变成问号。因为只坏几个字,很容易被当成偶发故障放过去,而实际上那是一个稳定复现的字符集问题。

排查的入手点是先确定那几个字的码位落在哪个区间,再查那个区间是哪一版加进来的。从PDF里抠文本那一篇里遇到的也是同一类问题,只是那次的断层发生在文本层而不是字符集。

用法二:把码位当成内容形态的分界线

这条可以直接写进选品或者选市场的判据表:第二道闸过了,这个市场可以做文字内容;没过,只能做图片内容,而图片内容在搜索上的天花板低一个数量级。

这个判据比看人口、看GDP都硬,因为它决定的不是市场大小,是你能不能用搜索这个渠道触达。

顺带说,这也是评估一个市场竞争强度的暗线。一个文字层没打通的市场,几乎不会有成熟的本地竞争对手在做搜索,因为大家都做不了。

但要提醒一句别把这条读反了:没有竞争不等于有机会。文字层没打通往往意味着这个市场的线上交易本身就很薄,用户可能连搜索习惯都还没形成。竞争少和需求少经常是同一件事的两个说法,得分开验证。

验证的办法是绕开这套文字去看需求侧:这个人群在用哪套文字或者哪门语言上网、有没有在搜商业词、当地有没有能承接的支付和物流。这些问题的答案跟文字编码没关系。

这一步做完往往会得出一个朴素的结论:这个人群实际上在用另一门大语言上网,你要做的是那门大语言的内容,而不是纠结这套文字。文字编码这一层的价值,多数时候是帮你尽早排除一个选项,而不是打开一个市场。

用法三:这套读法可以搬到别的标准上

这一篇的方法只有一句话:拿标准里的登记表,跟这套标准实际落地的数据对差,看差集里是什么。

能这么读的不止书写系统。语言代码跟界面语言清单可以对差,货币代码跟支付渠道支持的币种可以对差,国家代码跟物流覆盖可以对差。差集永远比并集有信息量,因为并集是宣传口径,差集是实际边界。

本站已经用这个方法量过几层了:区域格式数据的自有率是拿标准数据跟继承标记对差,语言选择器的排序是拿代码顺序跟自称顺序对差。每一次差集里都有东西。

用法四:给这件事一个合理的优先级

最后说句实在的。对绝大多数做跨境电商的读者来说,这一篇涉及的14套文字,一辈子可能一套都碰不到。

这一篇真正的价值不在名单,在那个结构:你以为的基础设施,是由一层一层独立的手续叠出来的,每一层都可能缺席,而缺席的原因通常不是技术难,是没有人负责。

这个结构在别处天天遇到。某个市场的支付方式、某门语言的分词器、某个平台的品类树——你用的时候以为它是天然存在的,出问题的时候才发现它背后是几个人的工作量。做排期的时候给这类依赖留一点余量,比事后救火便宜得多。

最后留一句给两篇合起来的读者。这两篇量的是同一件事的两道闸,得到的是同一个结论,而这个结论有个不太舒服的推论:你所在行业里那些看起来最稳固的基础设施,往往最没有备份。

不是说它们会塌,是说当它们需要变化的时候,推动变化的力量比你想象的小得多。知道这一点,至少能让你在做长期依赖的时候多问一句:这件事今天是谁在维护,如果这个人不做了会怎么样。

这个问题问出来通常会有点尴尬,因为多数时候答案是没人知道。但问过和没问过的区别在于,问过的人会在方案里留一条退路,没问过的人只有在出事那天才开始找。

放到这一篇的语境里,退路是什么很清楚:那套文字今天没有码位,你的方案就不能把它当成文本资产来规划。图片可以用,转写可以用,唯独不能假设它明年就能打出来。

常见问题解答

没有码位的文字,我可以自己申请吗?

可以,流程对所有人开放。但提案的门槛比语言代码申请高很多,要提交完整的字符清单、编码模型论证、字形样例和使用证据,通常还需要使用者社群的支持信。现实的做法是联系专门做这件事的项目,由他们协助或者代为提交。

这14套文字的名单会变吗?

会,而且变化不慢。Unicode每年发布一版,每版通常新增几套文字。这一篇的数字取自当前正式版本,下一版发布之后这份名单就要重数一遍。判断方法在文中给过:拿书写系统代码表跟当版的编码数据对差。

我的页面上放了这类文字的图片,替代文本该怎么写?

写这段文字的意思,加上拉丁转写。不要写这是某某文字的图片这种描述性文字,那对搜索和读屏都没有价值。转写很重要,因为它是这段内容唯一能被检索到的形态。

私有区方案真的一点都不能用吗?

内部系统里可以用,比如你自己的数据库、内部的排版工具。不能用在对外的网页上,也不能用在任何将来要迁移的数据里。判据是:这批数据将来会不会需要被别人读——会,就不能用私有区。

页面上同时出现两套文字,语言标签该怎么写?

整页的语言标签写主要那一套,页面里用另一套文字的片段单独标注。片段级的标注在实际站点上落实率极低,但它正是这类混排页面唯一能把信息传出去的地方,读屏软件和检索都靠它。

怎么知道我的目标市场用户实际用哪套文字?

看当地媒体和大型零售站的实际页面,不要看语言资料。有些语言在正式场合用一套文字、在日常网络上用另一套,甚至直接用拉丁转写。这个差别在词表阶段就会影响你的覆盖面。

为什么语言代码和书写系统代码是两套体系?

因为语言和文字本来就是多对多的关系。同一门语言可以用几套文字写,同一套文字可以写几千门语言。用一套编号同时表达这两件事会立刻打架,所以标准把它们拆开了,需要同时表达的时候再用语言标签把两者拼起来。

分享到
标签
版权声明

本文标题:《这16门语言都有语言代码,写它们的那14套文字一个码位都没有》

本文链接:https://zhangwenbao.com/minor-language-script-code-without-unicode.html

版权声明:本文原创,转载与引用请注明作者与原文链接。许可协议: CC BY 4.0

继续阅读
发表评论
分享到微信 或在下方手动填写
支持 Ctrl + Enter 提交