EmoArt
发布
术语表

什么是异体字选择器 (Variation Selector)

最近更新: 2026-05-24·约 4 分钟

本文约 4 分钟读完。

❤️ 这个红色爱心「一个心形却占 2 个码位」的原因就是异体字选择器。异体字选择器是一种不可见的控制字符,用于切换前一个字符的显示形式。 它支撑着 emoji 与文本显示的切换、汉字异体字 (旧字体、新字体等) 的指定、emoji 序列的调整等 Unicode 的精细控制。

定义

异体字选择器 (Variation Selector) 是 Unicode 中不可见的控制字符,作用是切换前一个字符的显示形式。 共有 16 个基本选择器 (VS-1 到 VS-16, U+FE00 至 U+FE0F) 和 240 个补充选择器 (VS-17 到 VS-256, U+E0100 至 U+E01EF)。 在 emoji 语境中最常出现的是 VS-15 和 VS-16 这两个。

VS-15 与 VS-16

选择器码位含义显示示例
VS-15U+FE0E文本显示 (单色文本风格)♥︎ (文本风格的心形)
VS-16U+FE0Femoji 显示 (彩色 emoji 风格)❤️ (红色 emoji 心形)

许多符号字符 (♥, ☂, ☀, ☘, ✉ 等) 最初是作为文本符号加入 Unicode 的。 后来随着 emoji 用途的普及,为了在「文本风格」和「emoji 风格」之间切换,引入了这两个选择器。

❤️ 为何由 2 个码位组成

作为 emoji 的 ❤️,内部由以下 2 个码位组合而成:

  • ♥ (U+2665) - 基础心形符号 (作为文本符号早已存在)
  • U+FE0F (VS-16) - 请求 emoji 显示的选择器

如果省略 VS-16,某些系统会将其渲染为 ♥ 这样的细线心形符号。 要显示红色 emoji 心形,VS-16 是必需的。 这种 2 码位结构是字符计数中「一个 emoji 消耗 2 个字符」的主要原因之一。

在 emoji 序列中的出现

在 ZWJ 序列中,经常使用在基础 emoji 后面插入 VS-16 的模式。 例如 🏳️‍🌈 (彩虹旗) 的序列如下:

  • 🏳 (U+1F3F3) - 白旗
  • U+FE0F (VS-16) - emoji 显示
  • U+200D (ZWJ) - 连接
  • 🌈 (U+1F308) - 彩虹

如果省略 VS-16,某些系统可能不显示旗帜,因此为了兼容性,在很多情况下它是必须的。

与汉字异体字的关系

异体字选择器最初是为指定汉字的旧字体、新字体、别字体而设计的。 在称为 IVS (Ideographic Variation Sequence) 的机制中,通过基础汉字 + VS-17 到 VS-256 的组合,可以明确指定特定字体。 例如「葛」的异体字 (草字头下面是「曷」还是「匂」等) 就是通过 IVS 来区分的。 虽然在 emoji 语境中不使用,但在日语处理领域是重要的机制。

实务注意事项

  • 字符计数: 包含 VS-16 的 emoji 由 2 个码位组成,需要注意
  • 文本处理: 在字符串反转或截取时,注意不要将 VS 与基础字符分离
  • 兼容性: 旧系统忽略 VS 时,emoji 可能以文本风格显示
  • 规范化: Unicode 规范化 (NFC, NFD) 会保留 VS,但 NFKC、NFKD 可能会删除

常见误解

  • ❌「异体字选择器是汉字专用的」→ ✅ emoji (VS-15/VS-16) 和符号也会使用
  • ❌「VS 不影响显示」→ ✅ 切换显示形式正是它的主要作用
  • ❌「删除 VS-16 emoji 也一样」→ ✅ 在某些系统上会变成文本风格

相关术语

  • Unicode - 定义异体字选择器的字符标准
  • emoji - 包含 VS-16 的构成很多
  • UTF-16 - 另一个导致字符数增加的因素

这篇文章对你有帮助吗?