复制下面两个字母,去掉中间的空格,你会看见最浪漫的奇迹

🇨 🇳

复制上面两个字母,去掉中间的空格,把它粘贴到评论区,你将会看到:

🇨🇳

你或许已经在很多个评论区里面见到过这种“神奇”的变化,那它的原理到底是什么呢?是不是像有的网友说的,这是QQ(微信)的彩蛋?

在不同平台尝试后,你会发现,除了QQ(微信),在抖音、微博、百度、谷歌……,也可以渲染出旗帜,并且呈现的花纹/颜色/质感/形状可能还有所不同(Windows端默认环境下不行,Windows系统对这些旗帜emoji的支持存在一定的限制)。

其实,这是一种特殊的 Unicode字符组合 ,我们使用 ord() 函数获取其Unicode编码。

print([ord(c) for c in "🇨 🇳"]) 

输出:

[127464, 32, 127475]

反过来,也可以输出字符。

print(chr(127464) + chr(127475))
print("\U0001f1e8\U0001f1f3")

可以得到 🇨🇳 字符

类似的还有:

🇺 🇸 ➔ 🇺🇸
🇰 🇷 ➔ 🇰🇷
🇦 🇩 ➔ 🇦🇩
🇦 🇪 ➔ 🇦🇪
🇦 🇫 ➔ 🇦🇫
………

那为什么两个Unicode字符放一起可以得到另外一个字符,而且很 巧合 地刚好是这两个字符组合所代表国家的国旗?为什么不同的平台呈现出来的效果会不一样,而作为全球最大的操作系统Windows 竟然不支持这一效果?

那么这里要先讲到两个关键点:区域指示符字符(Regional Indicator Symbol)和它的组合规则

区域指示符字符

  • Unicode中定义了26个区域指示符字符(U+1F1E6 到 U+1F1FF),分别对应字母A到Z。

  • 每个区域指示符字符本身是一个独立的字符,但当两个区域指示符字符组合在一起时,它们可以表示一个国家的代码。

下面给出Unicode区域指示符的完整列表:

字符 Unicode编码(十进制) 区域指示符符号
A 127462 \U0001f1e6
B 127463 \U0001f1e7
C 127464 \U0001f1e8
D 127465 \U0001f1e9
E 127466 \U0001f1ea
F 127467 \U0001f1eb
G 127468 \U0001f1ec
H 127469 \U0001f1ed
I 127470 \U0001f1ee
J 127471 \U0001f1ef
K 127472 \U0001f1f0
L 127473 \U0001f1f1
M 127474 \U0001f1f2
N 127475 \U0001f1f3
O 127476 \U0001f1f4
P 127477 \U0001f1f5
Q 127478 \U0001f1f6
R 127479 \U0001f1f7
S 127480 \U0001f1f8
T 127481 \U0001f1f9
U 127482 \U0001f1fa
V 127483 \U0001f1fb
W 127484 \U0001f1fc
X 127485 \U0001f1fd
Y 127486 \U0001f1fe
Z 127487 \U0001f1ff

组合规则

  • 区域指示符字符的组合必须符合ISO 3166-1 alpha-2标准(即国家代码由两个字母组成)。
  • 当两个区域指示符字符的组合符合ISO 3166-1 alpha-2标准时,Unicode兼容的字体或平台(如手机、浏览器)会将其渲染为对应国家的旗帜。

ISO 3166-1 alpha-2标准

ISO 3166-1 alpha-2标准是国际标准化组织(ISO)制定的一套用于表示国家和地区代码的标准。它为每个国家和地区分配了一个唯一的两位字母代码(alpha-2代码),这些代码广泛用于国际业务、数据交换、互联网域名、物流、金融等领域。

其具备以下特点:

  1. 两位字母代码

    • 每个国家和地区被分配一个唯一的两位字母代码。

    • 例如:

      • US:美国(United States)

      • CN:中国(China)

      • IN:印度(India)

      • DE:德国(Germany)

      • FR:法国(France)

  2. 唯一性

    • 每个代码在全球范围内是唯一的,不会与其他国家或地区重复。
  3. 广泛使用

    • 这些代码被广泛应用于各种国际标准和系统中,例如:

      • 互联网域名:顶级域名(如 .US.CN)。

      • 物流和运输:海关、航空运输等。

      • 金融交易:国际货币基金组织(IMF)和国际清算银行(BIS)等机构使用这些代码来标识国家。

      • 软件和数据库:用于存储和处理国家相关的数据。

  4. 维护和更新

    • ISO 3166-1 alpha-2标准由国际标准化组织(ISO)维护和更新。当有新的国家或地区成立,或者现有国家的名称或代码需要变更时,ISO会发布相应的更新。

以下是一些常见的国家和地区对应的ISO 3166-1 alpha-2代码:

国家/地区 ISO 3166-1 alpha-2代码
中国 CN
美国 US
印度 IN
德国 DE
法国 FR
日本 JP
英国 GB
加拿大 CA
澳大利亚 AU
巴西 BR
俄罗斯 RU
南非 ZA
阿根廷 AR
墨西哥 MX
意大利 IT
西班牙 ES
土耳其 TR
韩国 KR
荷兰 NL
瑞士 CH
沙特阿拉伯 SA
埃及 EG
印度尼西亚 ID
巴基斯坦 PK
意大利 IT
比利时 BE
丹麦 DK
挪威 NO
瑞典 SE
波兰 PL
意大利 IT
希腊 GR
意大利 IT
意大利 IT
………… …………

你可以结合Unicode区域指示符列表,组合出不同的国旗。

为什么Windows不支持?

2007年 ,Unicode联盟收到了一份由日本通讯公司NTT Docomo、KDDI和软银集团提出的emoji编码提案 ,这份提案中包括了十面国旗表情,这个时期的国旗表情是有单独的编码的。但在后面陆续补充更多国家的时候,Unicode联盟发现,与其花时间对每一面旗帜重新进行编码,干脆直接用区域指示字母来表示国家/地域旗帜emoji,也就是我们上文所提到的一系列规则。

也就是说,国旗emoji的“原型”不过是两个“字母”的地区代码 ,是否要渲染成对应的彩色旗帜表情符号,由各个平台去自行考虑 ,所以才会出现不同平台呈现的花纹/颜色/质感/形状有所不同的情况。

至于 Windows ,则是因为不是所有“国家”都被承认,而同一个地区的旗帜到底要呈现出怎样的效果也存在争议,为了避免政治问题与争端,“国际化”的微软平台发挥了一贯的保守兼容 作风——干脆都不支持。

总结

所以,这一看似非常神奇的效果,其实原理非常简单,当 🇨 🇳 中间的空格被去掉,就成为了 CN 字符,而平台(比如微信、QQ)就会根据对应规则将其渲染成 🇨🇳 emoji。

下次再在评论区看到国旗emoji,不要只会发”牛逼“和”求教程“了,这并非哪个平台、哪位仁兄独有的 特效 ,你可以告诉他:这是Unicode和ISO标准的完美结合!

注:您可以自由复制,更改和使用本文内容以及我提供的材料,但必须注明来源——材料来源自微信公众号 BeijiuX

关注 BeijiuX 公众号,查看更多内容.

weixin

posted @ 2025-04-13 17:48  BeijiuX  阅读(64)  评论(0)    收藏  举报