复制下面两个字母,去掉中间的空格,你会看见最浪漫的奇迹
🇨 🇳
复制上面两个字母,去掉中间的空格,把它粘贴到评论区,你将会看到:
🇨🇳
你或许已经在很多个评论区里面见到过这种“神奇”的变化,那它的原理到底是什么呢?是不是像有的网友说的,这是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代码),这些代码广泛用于国际业务、数据交换、互联网域名、物流、金融等领域。
其具备以下特点:
-
两位字母代码:
-
每个国家和地区被分配一个唯一的两位字母代码。
-
例如:
-
US:美国(United States)
-
CN:中国(China)
-
IN:印度(India)
-
DE:德国(Germany)
-
FR:法国(France)
-
-
-
唯一性:
- 每个代码在全球范围内是唯一的,不会与其他国家或地区重复。
-
广泛使用:
-
这些代码被广泛应用于各种国际标准和系统中,例如:
-
互联网域名:顶级域名(如
.US、.CN)。 -
物流和运输:海关、航空运输等。
-
金融交易:国际货币基金组织(IMF)和国际清算银行(BIS)等机构使用这些代码来标识国家。
-
软件和数据库:用于存储和处理国家相关的数据。
-
-
-
维护和更新:
- 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 公众号,查看更多内容.


浙公网安备 33010602011771号