【问题标题】:Combining Korean characters in Objective-C在 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有很好的解释。

【问题讨论】:

    标签: objective-c nsstring


    【解决方案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); // ㅁㅏ
      

      【讨论】:

      • 这给出了“ㅁㅏ”,而不是“마”。问题是关于将两个字符组合成一个
      猜你喜欢
      • 2014-07-31
      • 1970-01-01
      • 2016-11-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-30
      • 2012-09-16
      • 2018-12-19
      • 2015-03-30
      相关资源
      最近更新 更多