Skip to content

Instantly share code, notes, and snippets.

@ParadoxV5
Created October 18, 2024 21:16
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 { _1
.encode(Encoding::Big5_HKSCS) # 大五码・香港增补字符集
.force_encoding(Encoding::GB18030) # 信息技术 中文编码字符集(码位最多)
}.join(' ').encode(Encoding.default_external)
@ParadoxV5
Copy link
Author

上述超出GB范围的大五依然在编码范围内,只是对应到了用户定义区;而GB用户定义区也有规范对应的 Unicode 的私人使用区。
比如“蛮も糃”和“弟﹊”,它们虽然看起来都是“�”(“kǒu”),但实际上是不同的编码;不仅反翻译不会丢数据,当设计出魔塔语专用字体后还能显示不同的字符。

这些范围是:

字节一 字节二 字符数
A1–A7 40–7E 7×63 =441
AA–AF A1–FE 6×94 =564
F8 A1–FE 1×94 =94
F9 A1–D5 1×53 =53

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