人民币符号的那些疑惑

人民币符号问题可能是每个前端开发者都会遇到的问题,你可能和设计师争论过是一横还是两横,也可能和同事争论过是 ¥ 还是 ¥,这里记录一下。

人民币符号是 ¥ U+00A5 还是 ¥ U+FFE5

下表列出了人民币和美元、英镑、欧元等币种的符号和编码:

Symbol Unicode Decimal Name HTML Entity
¥ U+00A5 165 YEN SIGN ¥ ¥ ¥
U+FFE5 65509 FULLWIDTH YEN SIGN ¥
Ұ U+04B0 1200 CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE Ұ
$ U+0024 36 DOLLAR SIGN $ 
U+FF04 65284 FULLWIDTH DOLLAR SIGN $
£ U+00A3 163 POUND SIGN £ £
U+FFE1 ... FULLWIDTH POUND SIGN ...
U+20AC ... EURO SIGN € € €
U+20A9 ... WON SIGN ...
U+FFE6 ... FULLWIDTH WON SIGN ...

其中半角字符 ¥ U+00A5 和全角字符 ¥ U+FFE5 都表示人民币符号(日元也是这个符号),都是正确的。

具体使用 ¥ U+00A5 还是 ¥ U+FFE5 取决于上下文,如果语境是西文或者是和半角数字搭配,使用半角 ¥ U+00A5 更美观,如果语境是中文,全篇标点符号都是全角字符,那使用全角 ¥ U+FFE5 更合适。美元、英镑符号也是同理。

怎么输入人民币符号

微软拼音输入法,中文模式,按 Shift + 4 默认输出全角 ¥,支持通过按 Shift + Space 切换全/半角。

macOS 简体拼音输入法,按 Shift + 4 默认输出半角 ¥,支持配置“使用半/全角标点符号”,修改后可变为输出全角 ¥。

人民币符号在 HTML 中使用时需不需要转义

过去 HTML 的编码不统一,尤其在非英语国家问题泛滥,国内同时存在 GB2312、GBK、GB18030,以及港台使用的 BIG-5,开发者相关知识的缺乏,导致单个项目中同时存在多种编码文件。因此需要使用 HTML 字符实体或者转义字符,以半角字符 ¥ U+00A5 为例,转写为 ¥(名称)、¥(Unicode 十进制编码)、¥(Unicode 十六进制编码),可以最大程度保持兼容,不受文件编码影响。

目前 Web 开发普遍使用 UTF-8 编码,可以直接使用原始字符,让代码有更好的可读性,所写即所见,没有特殊情况不应该强制转义。

人民币符号是「Y」加一横还是两横

目前并没有明确标准规定是一横还是两横,不过我们可以参考人民币纸币:

在第五套人民币 2005 年版的「全息磁性开窗安全线(100 元)」上,人民币符号的造型为:Y 字母加两道水平线。

字体中的人民币符号样式

新的 Windows/macOS/Android/iOS 系统中,无论是 ¥ U+00A5 还是 ¥ U+FFE5 系统默认 UI 字体都展示为 Y=

具体就是:

  • Windows 10 —— Segoe UI、Arial、微软雅黑
  • macOS/iOS —— Helvetica Neue、苹方、华文细黑
  • Android —— Roboto、思源黑体

在 Windows XP 年代,默认中文字体中易宋体将 ¥ U+FFE5 显示为 Y-,这可能是部分开发者坚持使用 ¥ U+00A5 的原因。

一般来说,正文使用如下的字体族定义已经足够覆盖桌面端和移动端。

body {
  font-family: -apple-system, BlinkMacSystemFont, Roboto, 'Segoe UI',
    'Helvetica Neue', Helvetica, Arial, 'PingFang SC', 'Source Han Sans SC',
    'Mi Lan Pro VF', 'Mi Lanting', 'Noto Sans CJK SC', 'Microsoft YaHei',
    'Heiti SC', 'DengXian', sans-serif;
}

如果希望更精细地控制人民币符号字体,可以选择自定义字体族:

@font-face {
  font-family: Yuan;
  src: local('PingFang SC'), local('Microsoft YaHei'),
    local('Source Han Sans SC'), local('Noto Sans CJK SC');
  unicode-range: U+00A5, U+FFE5;
}

body {
  font-family: Yuan, -apple-system, BlinkMacSystemFont, Roboto, 'Segoe UI',
    'Helvetica Neue', Helvetica, Arial, 'PingFang SC', 'Source Han Sans SC',
    'Mi Lan Pro VF', 'Mi Lanting', 'Noto Sans CJK SC', 'Microsoft YaHei',
    'Heiti SC', 'DengXian', sans-serif;
}

这里我们自定义了一个新的字体族 Yuan,单独设置 ¥ U+00A5 和 ¥ U+FFE5 的字体,优先使用苹方、微软雅黑、思源黑体来展示人民币符号。

常见字体的人民币符号样式

以下是部分中西文字体在显示人民币符号时的统计结果:

¥ U+00A5 显示为 Y= 的字体

  • 西文字体
    • Segoe UI: ¥
    • Arial: ¥
    • Consolas: ¥
    • Courier New: ¥
    • Times New Roman: ¥
    • Cambria: ¥
    • Helvetica Neue: ¥
    • Roboto: ¥
    • Verdana: ¥
  • 中文字体
    • 苹方: ¥
    • 微软雅黑: ¥
    • 思源黑体: ¥
    • 思源宋体: ¥
    • 冬青黑体: ¥
    • 中易宋体: ¥
    • 方正等线: ¥
    • 华文宋体: ¥
    • 华文细黑: ¥
    • 华文楷体: ¥
    • 华文仿宋: ¥
  • 其他字体(虽然显示为 Y= 但第一横位置偏上)
    • Comic Sans MS: ¥
    • Helvetica: ¥
    • 儷黑: ¥

¥ U+00A5 显示为 Y- 的字体

  • 西文字体
    • Georgia: ¥
    • Tahoma: ¥
    • Trebuchet MS: ¥

¥ U+FFE5 显示为 Y= 的字体

  • 中文字体
    • 苹方:
    • 微软雅黑:
    • 思源黑体:
    • 华文细黑:
    • 方正等线:

¥ U+FFE5 显示为 Y- 的字体

  • 中文字体
    • 中易宋体:
    • 中易楷体:
    • 中易黑体:
    • 中易仿宋:
    • 华文宋体:
    • 华文楷体:
    • 华文仿宋:
    • 兰亭黑:

主要是 Georgia/Tahoma/Trebuchet MS 这几款经典英文字体和中易、华文的几款字体在显示 ¥ U+00A5 或 ¥ U+FFE5 时会渲染为 Y-。可能有人会奇怪,为什么 ¥ U+FFE5 的统计结果里缺席西文字体?答案是不支持。全角字符 ¥ U+FFE5 通常只有中文字体支持,因此使用半角字符 ¥ U+00A5 的一大优势是西文字体支持率高。话说回来,在2020年,但凡还在更新维护的操作系统,又有多少是不支持中文显示的呢?

相关链接