变体 (Unicode)

在Unicode中，字符变体指通过编码字符序列显示同一字符的不同字形。这种变体序列（variation sequence）由一个基本字符后紧跟一个变体选择符（variation selector）组成。

一个字符的变体通常与它的基本字符有非常相像的外观和涵义。这项技术旨在当一个字符的变体字形不可用时，仍显示其基本字符，却不改变文本本身的涵义。

Unicode定义了两种变体序列：

- 标准变体序列（SVS）：由统一码字符数据库（UCD）文件`StandardizedVariants.txt`收录的变体序列
- 表意文字变体序列（IVS）：由表意文字变体数据库（IVD）文件`IVD_Sequences.txt`收录的变体序列

变体选择符定义于数个Unicode区块内：

- 变体选择符（16个字符，缩写：VS1—VS16）
- 变体选择符补充（240个字符，缩写：VS17—VS256）
- 蒙古文自由变体选择符（3个字符，缩写：FVS1—FVS3）

## 概述

<image>

<image>

Unicode是一个字符编码表，它只是一个表格，并不描绘每个字形的样式。同样意义的字符常会被赋予相同的编码。因此，在一些情况下，有必要区分不同的字形。

须注意的是，譬如拉丁字母“a”是否有从顶部向右延伸的线，通常不属于不同字形之间的差异，因为可以通过更改电脑字型来修改。可是，在中日韩统一表意文字中，本来根据Unicode的认同原则应该统合的汉字异体字字形，却在一些国家或地方的电脑应用标准里，经常被视为是“另一个字”的字形。举例说，“値”与“值”字形差异细微，读音、意义都一样，一般书写和阅读时都不会视为两个不同的字，理论上可以合并。但是，在个别国家或地区里，此二字在某些情况中出现时，会被当作相异的资讯。因此，根据情况，有时需要在纯文本上保存不同字形的区别，例如：

- 在大部分操作系统中，档案名称是纯文本，不能区别在文本中不能区分的东西。
- 输入法可以输入的字符串一般都是纯文本。即使用户可以使用桌面出版应用程序选择不同字型来显示，除了与输入正常字符有不同的操作外，还必须记住正确的组合，这对于大多数普通用户来说并不实用。例如在Windows Vista日语版中，可以区分显示“葛饰区”的“

<image>

”和“葛城市”的“

<image>

”，不过“

<image>

”与“

<image>

”在Unicode编码上并无区别，其输入法无法正确转换。
- 用于发送电子邮件的SMTP等网络传输协议是用纯文本发送的，因此不能区分一些相同编码字符的不同字形。

为了应付这类情况，早期Unicode碰到在有关国家或地区既有码表已分别编码的字，像“値”与“值”，就会放弃认同原则，改以原字集分离原则来把两个字形分别编码。但若当时有关国家或地区没有把异体字分别编码，像日本的JIS90只收录了一个“葛”字，Unicode就不会分别编码。

变体选择符是为了在Unicode中解决上述问题而设计出的特殊的“字符”，让有着相同码位的异体字（即“葛”字这类例子）可在纯文本环境下分别显示出来。它可以根据前后文来判断，决定在当前文本中所使用的文字，并由变体选择符选择不同的字形。请注意，显示出来的会是变体选择符所指定的字形，而不是变体选择符本身。

## 种类

变体序列一般分两种：标准变体序列（Standardized Variation Sequence，简称“SVS”），以及表意文字变体序列（Ideographic Variation Sequence，简称“IVS”）。

SVS在非汉字及中日韩统一表意文字中均有启用，这种字形选择，定义为Unicode的标准化变体。要在标准化变体里添加字形，是统一码联盟的工作。

另一方面，IVS是汉字专用的变体选择符，字形收集是由表意文字变体数据库（Ideographic Variation Database，简称为“IVD”）定义的。要想在IVD中增加字形，也必须根据规定向统一码联盟申请。

截至Unicode 16，由变体序列所使用的变体字符如下所示：

标准变体序列录入的字集和数量

- 数学符号表：25个
- 缅文：27个
- 八思巴字母：6个
- 摩尼字母：5个
- 传统蒙古文：60个
- 中日韩统一表意文字：1,002个
- 圣书体：旋转变体101个，另有8个在历次UTC Consensus已被删除；扩展变体4个
- 绘文字：702个（文本类型和图形文字的类型351个）

表意文字变体数据库录入的字集和数量

- CID之Adobe-Japan1集：14,683个
- 通用电子信息交换环境整顿计划之Hanyo-Denshi集：13,045个
- 文字信息基础整备事业之Moji_Joho集：11,384个
- 澳门特别行政区之MSARG集：21个
- 韩国之KRName集：36个

但是Hanyo-Denshi与Adobe-Japan1有很多重复。

### 字形规格

- OpenType1.5版使用了“Unicode变体选择符（Unicode Variation Sequences）”规格。
- SVG不仅局限于IVS，亦可以任意Unicode编码。

### 字体创建工具

- FontForge - 2007年10月2日之后。
- Adobe Font Development Kit for OpenType (AFDKO) 2.1版之后。
- TTX/FontTools - GlyphWiki来生成IVS对应字体。
- TTEdit - 对应生成IVS TrueType字体。

### 库

2007年10月FreeType以后的开发板内置了API工具。

### 软件

- Windows 7在资源管理器的所显示文件名及记事本中可以生成异体字字形。但是需要字体支持。
- Windows 8以后，采用IVS处理。
- Mac OS X 10.5标准文本和绘制处理遵从default ignorable属性，不会渲染异体字，也不支援字形切换。
- Mac OS X 10.6开始自建标准文本的绘制处理可支持字形的转换，但和Windows 7同标准的字型Hiragino未支援变体选择符。
- Mac OS X Lion（10.7）则采用了Adobe-Japan1的IVS。

<image>

- Alpha（文本编辑器） - 2008年2月在IVS-OTFT测试公开版中，通过将变体选择符的信息转换为opentype功能标签的信息，对应于由不同体字选择符进行的字形切换。
- gdi++
- Emacs 23
- EmEditor v11之后
- FooEditor （文本编辑器）
- gPad（文本编辑器）
- Mery（文本编辑器）
- oedit（文本编辑器）
- Adobe Reader 9、Flash Player 10、Adobe InDesign CS4之后的Adobe软件。
- Windows 7及之上的Opera（Presto）
- Mozilla Firefox版本4之后。另外，在版本31以后，改由CJK来实现该功能。
- WebKit可以支持SVG字体，由SVG字体定义的IVS进行字形切换。这与Opera相同。
- Microsoft Office 2007 - 2010版本需要附加Unicode IVS Add-in for Microsoft Office插件，2010之后的默认自带。
- LibreOffice 4.1之后/Apache OpenOffice 4.0之后

## 延伸阅读

- 上记3资料を并合して日本语訳したもの。
- 页面

## 外部链接

- Standardized Variants - Unicode (已录入的SVS一览)
- Unicode Technical Standard #37 - Unicode Ideographic Variation Database (IVD结构和注册程序)
- Ideographic Variation Database - Unicode (关于IVD)
- IVD Sequences - Unicode (2017-12-12版) (IVD登记的汉字的组合列表)
- 异体字选择符 - 搜索SVS・IVS所有可用的变体。