Skip to content

Instantly share code, notes, and snippets.

@ParadoxV5
Last active July 10, 2025 04:19
Show Gist options
  • Save ParadoxV5/dc83a331671303e278bf6bbd08600c9e to your computer and use it in GitHub Desktop.
Save ParadoxV5/dc83a331671303e278bf6bbd08600c9e to your computer and use it in GitHub Desktop.
魔塔语(大五码当GB读的乱码)
# ### 问:大五码系列和GB系列的字节长度“兼容”吗?
# 大五码系列用一或两个字节编码一个字符,而最新的 GB 18030 用一、二或四个。
# * 大五和GB的单字节范围都是 `00`–`7F`;大于这个范围的字节才表示多节的编码。
# * GB 18030 特有的驷节编码通过 `30`–`39` 范围的第二节辨识;这个范围小于大五*和GB*的双节编码的第二节范围。
# 排除上面后,大五码系列除了错误之外的双字节均对应GB系列的双字节————虽然有些大五范围超出了GB范围。
puts ARGV.map { it
.encode(Encoding::Big5_HKSCS) # 大五码・香港增补字符集
.force_encoding(Encoding::GB18030) # 信息技术 中文编码字符集(码位最新最全)
.encode(Encoding.default_external)
}
@ParadoxV5
Copy link
Author

ParadoxV5 commented Nov 12, 2024

上述超出GB范围的大五依然在编码范围内,只是都映射到了用户定义区;
而GB用户定义区也有规范对应的 UCS(俗称 Unicode)的私人使用区。

这些自定义范围是:

字节一 字节二 码位数 对应的 UCS 码位
A1–A7 40–7E 7×63 = 441 E4C6–E744(断续)
AA–AF A1–FE 6×94 = 564 E000–E233
F8 A1–FE 1×94 = 94 E234–E291
F9 A1–D5 1×53 = 53 E292–E2C6

比如“蛮も糃”和“弟﹊”,它们虽然看起来都是“kǒu”,但实际上是不同的编码;
不仅反翻译不会丢数据,当使用私人使用区特殊字体时后还能显示不同的字符。
U/CSUR为例:(我还没听说魔塔语字体的ègǎo。)

  1. 前者(U+E60E)为 FERENGI MINUS SIGN。
  2. 后者(U+E67C)是暂未收录的 SYLABITSA LETTER H。

最新、最全的 GB 18030 将前代GB的许多自定义码位改定成了实际字符,有对应的 UCS 码位,但均不在这些范围内。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment