我发现(当面对这问题)与输入法相关的两个词是西姆&乌姆。我只知道名字:X输入法和通用输入法。
我想知道xim 和 uim 在使用、功能和工作方面有什么区别?
答案1
最大的区别是大多数输入系统都是服务器客户端实现的,uim 只是一个库。
大多数用户根本不需要输入法系统,或者只需要简单的基于表格的转换器。此类用户不需要或不愿意安装复杂的输入法系统,因此我们希望保持 uim 简单。
Uim 是一个输入法模块库,支持各种脚本,可以作为一系列输入法的前端,包括 anthy、canna、prime 或 skk(日语)、pinyin(中文)、byeoru(韩语) 、和 m17n(对于许多其他语言)。它的大部分功能都是用方案来实现的,所以非常简单、灵活。来源
那么XIM呢? XIM 是一个相当过时的输入法协议,ibus 和 fcitx 仅出于遗留支持原因而实现它。现在没有任何理由让您想要使用 XIM 而不是这两者中的任何一个。您想要设置 GTK_IM_MODULE="xim" 的唯一原因是覆盖 GTK 的硬编码 ComposeKey 设置。来源
答案2
有很多不同的方法可以回答这个问题。这是我的不完整且有偏见的答案。
长话短说西姆是旧的、过时的,并且不适合使用 Unicode 进行文本交换的多语言世界。乌姆旨在解决所有这些限制,是多语言键盘输入的前进方向。
我们将从 ASCII 字符集开始我们的故事。在 20 世纪 70 年代及之前,ASCII 有两种将一系列字符编码为 8 位的方法,另一个竞争者是 EBCDIC。在我看来,有两件事导致 ASCII 战胜了 EBCDIC。第一个是 ASCII 只需要 7 位,允许将第 8 位用于奇偶校验。当数据连接通过每秒传输 300 位且经常出错的调制解调器进行时,实现 12.5% 的压缩率以及提供错误检测和纠错功能非常重要。 EBCDIC 使用了全部 8 位。另一件事是 EBCDIC 是由当时的大垄断者 IBM 设计和推广的(很多人说 Windows 并没有赢得近乎垄断的地位,他们只是给了 IBM 的,让 IBM 摆脱了自己垄断的困境)活动。),虽然 ASCII 源于电传打字机,但 AT&T 与之有很大关系,AT&T 也与 IBM 不友好并发明了 Unix。
无论出于何种原因,ASCII 在互联网、Unix 以及最终 Windows 和 Apple 计算机上获胜。然而,随着这些工具的传播,开始需要包含标准罗马字符以外的字符。当时获得关注的以民族为中心但实用的解决方案是使用 ASCII 保留的 128 个字符空间(256 个字符由 8 位或一个字节(计算机处理的自然单位)表示)来添加非英语变体罗马字母,例如 à、ç、ñ、Ö 等。这在当时是件好事,但给后来的 Unicode 带来了严重的麻烦。
无论如何,XIM 很古老,在某些方面是 X11 的原始输入方法,并且是在这种时代精神中构建的,其中假设“字符”由 8 位加上字符编码表表示。 (字符编码表允许对 128 个非 ASCII 字符代码进行不同的解释。著名的 Windows 使用Windows-1252当苹果使用麦克·罗曼。 ISO 试图通过以下方式标准化事物:ISO-8859-1但这并没有成功,这导致了 Unicode 和 UTF-8,但仍然超出了我们的预期。)
从那时起的多年来,Unicode 联盟在设计字符编码系统方面做得非常出色,该系统涵盖了世界上所有语言(以及一些虚构的语言)的所有字素,同时仍然保持与数十年遗留代码的向后兼容性。每字节一个字符。就像希姆一样。因为 ASCII 是为英语编写的,而英语在计算领域仍然占主导地位,所以很多人只是继续使用旧工具,所以今天仍然可以找到它们。
添加对 Unicode 的支持很困难,因为语言复杂多样,并且有无数的规则。有些从左到右,有些从右到左,有些双向,有些甚至从上到下。然后,字符上会有额外的标记,例如¨
在德语中是元音变音,如 中,ü
但在荷兰语中是 Trema,如 中ë
。那么在德语中,如何对 u 和 ü 进行排序呢?同样的规则也适用于荷兰语中的 e 与 ë 吗?这种情况一直持续下去。因此,有很多工具对此类事情提供不同的支持。
最值得注意的是,对于 xim 和 uim 来说,早期剪切的字符(例如 î 和 ñ)由单个 Unicode“代码点”表示,这就是当今大多数软件所认为的字符。如果您在 Unicode 中查找 ñ,您会发现它是一个名为“带有波浪线的拉丁小写字母 N”的代码点。但在某种程度上,Unicode 意识到字母和标记的组合太多,无法将它们全部组成单个代码点。于是他们就想出了“组合变音符号”的想法。这是一种将字母与标记结合起来形成标记字母的方法。人们所认为的字符(Unicode 称为字素)现在可以由字母和一个或多个组合标记组成。这为我们提供了一种创建各种字素的方法,正如在这个帖子。仍然存在问题,因为现在您可以输入 ñ (U+00F1) 或 ñ (U+006E U+0303),它们看起来相同,含义相同,但计算机对它们的处理方式不同。但至少现在您可以输入 G̃ 或 g̃,而无需请求 Unicode 联盟添加另一对字符。
然而,这样做打破了 xim 和许多相关代码构建的基本假设,即单个字符与单个代码点相同。 X11 和 xim 能够适应~n输出单个字符 ñ,但这是它们在不进行重大重写的情况下所能达到的极限。 uim 是在 Unicode 世界中构建的重写,用于处理所有 Unicode 复杂性。
要使用 uim 而不是 xim,只需将以下内容添加到您的配置文件、xprofile 或 xinitrc 中即可:
export GTK_IM_MODULE=uim
export QT_IM_MODULE=uim
uim-xim &
export XMODIFIERS=@im=uim
不同系统的情况有所不同,但您可以通过 Google 找到根据您的具体情况量身定制的更完整的说明。