你发现社交媒体市场上存在一个空白:非常非常短的帖子。 如今 Twitter 允许发布 280 个字符的帖子,那些想要快速更新社交动态的人依然无法得到满足。 你决定创建自己的社交网络。
为了让产品引人注目,你把它做得很极端:只允许发布 5 个或更少字符的帖子。 超过 5 个字符的帖子一律截断为 5 个字符。
为了让用户充分表达自己,你允许使用表情符号和其他 Unicode 字符。
任务是:把输入的字符串截断为 5 个字符。
以数字方式存储的文本必须转换成一连串的字节。 把字符映射为字节的常用方式有 3 种。
UTF-8 和 UTF-16 都是 Unicode 编码,也就是说它们能够表示范围极其广泛的字符,包括:
UTF-8 和 UTF-16 都是变长编码,也就是说,不同的字符占用的空间大小不同。
看看字母 'a' 和表情符号 '😛'。 在 UTF-16 中,这个字母占 2 个字节,而这个表情符号占 4 个字节。
这道练习的诀窍在于,使用围绕 Unicode 字符(码点)设计的 API,而不是 Unicode 码元。
在 8.1 版本中,Tcl 字符串已经能够无缝处理 Unicode 字符。在当时,这相当具有开创性。然而,随着越来越多的 Unicode 字符被创造出来,Tcl 处理它们的能力逐渐落后。
Tcl 的内部实现只能处理 16 位的 Unicode 字符,只覆盖了前 65,526 个字符。这个 Tcl wiki 页面给出了原因,尤其是其中关于“AndroWish”语言的讨论。
Tcl 9.0 是第一个能够处理完整的 Unicode 字符集的版本。因此,只有使用 Tcl 9.0 版本才能(轻松地)解出这个练习。