在啥情况下 [NSEvent characters] 可以是长度大于 1 的 NSString?

Posted

技术标签:

【中文标题】在啥情况下 [NSEvent characters] 可以是长度大于 1 的 NSString?【英文标题】:Under what conditions can [NSEvent characters] be a NSString of length greater than 1?在什么情况下 [NSEvent characters] 可以是长度大于 1 的 NSString? 【发布时间】:2016-06-05 03:35:01 【问题描述】:

NSEvent 有一个 characters 属性,它是一个对按键向上/向下事件有效的 NSString。什么情况下字符串长度可以大于1?

到目前为止,我能找到的唯一条件是 NSEvent 对应于来自 IME(输入法编辑器)的输入。

编辑 - 我知道代理对案例,但在问这个问题时,它不知何故从我的脑海中溜走了。我对没有的情况更感兴趣。 of graphemes(characters) 本身大于 1。

【问题讨论】:

【参考方案1】:

什么情况下字符串长度可以大于1?

当您的键盘/输入法可以输入任何需要 UTF-16 代理对的单个字符时,例如a ?(Unicode 线性 B 音节 B008 A),则 length 将为 2。这是因为 length 返回 16 位代码单元的数量,而不是字符数量。

【讨论】:

【参考方案2】:

您也可以通过以编程方式发布的事件来获取此信息。 CGEventKeyboardSetUnicodeString() 允许调用者将任意字符串附加到键事件。

【讨论】:

【参考方案3】:

高 unicode 代码点在 Mac OS X 中使用字符序列进行编码。试试 ?。

【讨论】:

以上是关于在啥情况下 [NSEvent characters] 可以是长度大于 1 的 NSString?的主要内容,如果未能解决你的问题,请参考以下文章

- (void)keyDown :( NSEvent *)事件不起作用

在啥情况下静态方法是一个好习惯?

在啥情况下“Openwrt”优于“Buildroot”框架?

在啥情况下 [ [ UIApplication sharedApplication ] keyWindow ] 返回 nil?

在啥情况下 alloca() 有用?

在啥情况下 [NSDocument fileURL] 可以为零?