在 Objective-C 中组合韩语字符

Posted

技术标签:

【中文标题】在 Objective-C 中组合韩语字符【英文标题】:Combining Korean characters in Objective-C 【发布时间】:2014-05-30 22:54:58 【问题描述】:

我一直在为此挠头。

我想把两个韩文字符组合成一个。

ㅁ + ㅏ = 마

我将如何使用 NSString 进行此操作?


编辑:

zaph 的解决方案适用于两个字符。但我对如何组合超过 2 个感到困惑。

ㅁ + ㅏ + ㄴ = 만

但是

NSString *s = @"ㅁㅏㄴ";
NSString *t = [s precomposedStringWithCompatibilityMapping];
NSLog(@"%@", t);

打印出来

마ㄴ

编辑 2:

我环顾四周,似乎更多地参与其中。像“만”这样的字符由 3 个部分组成。最初的jamo,中间的jamo和最后的jamo。这些需要结合起来映射到韩文音节中的代码点,使用下面的等式。

((initial * 588) + (medial * 28) + final) + 44032

这个blog post有很好的解释。

【问题讨论】:

【参考方案1】:

使用'- (NSString *)precomposedStringWithCompatibilityMapping'。

NSString *tc = @"ㅁㅏ";
NSLog(@"tc: '%@'", tc);
NSString *cc = [tc precomposedStringWithCompatibilityMapping];
NSLog(@"cc: '%@'", cc);

NSLog 输出:

tc: 'ㅁㅏ' 抄送:'마'

查看 Apple 的技术问答 QA1235:Converting to Precomposed Unicode

【讨论】:

谢谢扎夫。您的解决方案有效!但我对如何组合超过 2 个字符感到困惑(我的问题已被编辑)。有没有更通用的解决方案?【参考方案2】:

它们实际上是不同的 Unicode 字符。 ㅁ (\u3141) 是“Hangul compatible jamo”块的一部分,这些字符应该单独出现(例如,当你想说明一个单独的 jamo 时)。你想要的实际字符是\u1106。例如,这里是 \u1106 后跟 \u1161,分别从 Unicode 表复制和粘贴:마。如您所见,它们组成了您想要的角色。

【讨论】:

【参考方案3】:

很简单:

NSString *first = @"ㅁ";
NSString *second = @"ㅏ";

NSString *combinedStr = [first stringByAppendingString:second];

NSLog(@"%@", combinedStr); // ㅁㅏ

【讨论】:

这给出了“ㅁㅏ”,而不是“마”。问题是关于将两个字符组合成一个

以上是关于在 Objective-C 中组合韩语字符的主要内容,如果未能解决你的问题,请参考以下文章

IOS/Objective-C:查找字符串中单词的索引

快速调用objective-c类方法

可以在 Objective-C 中组合两个用户类吗?

Swift正在蚕食Objective-C的市场

Objective-C中的 id, isa,和 instancetype

MFC 多语言应用程序 - 英语、法语、西班牙语和韩语