显示韩文字符 - iOS App

FCA*_*FCA 4 unicode objective-c internationalization cjk ios

我想在我的iPhone应用程序中显示韩语文本.该应用程序将字母Unicode逐个附加到NSMutableString,并在每个字母添加后在屏幕上显示该字符串.

我知道有一些联合字母的规则(Jamo).

是否有自动将所有这些规则应用于字母串的功能,或者我是否需要编写代码进行更改(例如,如果前面有元音,则将辅音更改为尾部辅音)?

Jon*_*ark 7

FCA.是你给我发了电子邮件,对吗?因为这里有更详细的问题,我会尝试(我最好)在这里回答,而不是回复你的电子邮件.

通过阅读你和人们在这里写的全文,我发现你正在制作韩国手写识别软件.因此,您不会享受Apple提供的韩国输入法的奢华.

我有两件事要说.我们一个接一个.(我相信你已经知道我要解释的两件事之一.)

  1. 如何撰写韩文文本.

    因此,通过阅读您的查询,它不应该是关于Unicode组合/分解韩语字符串(或只是一系列Ja(辅音)和Mo(元音)).你的问题看起来是关于"如何确定一个辅音(你的术语是尾部辅音,对吗?)用户写的是最后一个辅音或下一个音节的开始辅音.最好的事情是学习韩语,但让我简单解释一下它.

让我们说你写소방차(消防部门.汽车.)你要写:ㅅㅗㅂㅏㅇㅊㅏ(我不是在谈论分解形式的Unicode.它是关于人们如何写韩文文本.)

当您暂时键入ㅗ(第二个字符)时,显示系统会通过将attaching附加到其前面的ㅅ来显示소.它会查找韩国餐桌.(虽然如何组装Hangul是JoHap风格(조합형),这被称为复合风格,但是在任何韩国标准中都有一个允许的韩文文本表,称为Wansung风格(완성형).所以,你要测试"组合"的音节到表格,看看是否有这样的音节).然后你会在表格中找到"소".所以,你会显示"소".

现在写下一个字母"ㅂ".然后在这里变得有点复杂.因为表格中有一个音节"솝",所以首先它会将attach附加到前一个音节.所以,它会显示"솝".然而,事情还没有完全确定.用户写下一个字符"ㅏ".没有第一个/开始辅音(Ja),很可靠没有音节.它会查找表格,但找不到音节"ㅏ".

因此,它会猜测附加到前一个音节的ㅂ(从ㅅ.编辑错字编辑)实际上属于第二个音节.它应该显示"소바".现在,ㅇ是打字的.然后它试图将attach附加到第二个音节.所以它显示소방.(此时它还可以在表格中查找방.并且找到它.)

现在,输入"ㅊ".可能在内部它可以测试소방ㅊ其中o和ㅊ存在于바(我不能写它,因为没有这样的音节,o和ㅊ一起存在于바下,如밝.).但是,没有这样的音节.因此,它立即确定ㅊ属于下一个音节.

然后输入"ㅏ".它会组装ㅊ和ㅏ来制作차.当您按空格键或返回键或任何其他空格键时,它将完成组合韩文.

这是一个简单的案例.在韩语中,有更复杂的音节,如빨,꼭,헗等.对于第一个辅音,복자음(BokJaUm,双辅音)喜欢ㅃ,ㄲ在빨和꼭,人们按下shift键键入ㅂ和ㅅ.然后它会显示ㅃ和ㄲ.因此,如果用户键入键盘,那么拾取辅音如何以及确定它所属的位置(前一个音节或下一个音节)可能很容易.(但是,对于Windows和Xterm,有一些很好的韩语输入法,它允许输入ㅂ两次来制作ㅃ.这是一种智能功能.但测试像빱빠라빱,흙을等文本可能会很复杂,因为你最终会测试3或4个辅音分组如{1,3},{2,2},{3,1}.

坏消息是......因为你正在编写手写识别,如果你将识别的韩文字符逐个输入到韩文输入法引擎中,你可能需要处理这种复杂的情况.但是,如果您在应用程序中编写自己的输入法,则可以维护自己的状态机,因此可以更容易.但正如你所看到的,这是一种权衡.取决于现有的输入法引擎并将每个字符摄取到其中.(嗯......等等......也许输入法引擎也可以处理那些复杂的情况.)

仅供参考,我想介绍两个开源项目.一个是用于Mac韩语输入法Finder模块,另一个是输入法引擎,您可以使用它来制作韩语输入法.此外,还有用于X-Windows的韩文输入法托管在这里.如果你更喜欢Windows项目查找,这里有一个.

后两者是在韩国开源项目托管网站KLDP.net上托管的,但他们被转移到谷歌代码.据我所知,"SaeNaRu"和"Nabi"(蝴蝶)可以支持两次输入相同的辅音来制作双辅音.

有关更多详细信息,您可以查找libhangul和nabi.(我记得之前libhangul和nabi之间的输入法部分代码几乎相同.但那时它们是分开的,并且预计会独立发展.所以,我猜它们是不同的.

好.第一件事就完成了.

现在让我们继续讨论第二个问题.(这是我说你可能已经知道的部分.但是为了完成我的解释,让我也解释一下.)

它是关于选择哪个字符作为可能的韩语输入法状态机或像libhangul这样的引擎的输入.组合(显示)韩文字符基本上有两种表示形式:组合和分解.组合一个包含完全组成的字符.例如,사랑합니다,每个音节,사,랑,합,니,다都是这样保存的.它们不存储为ㅅ,ㅏ,ㄹ,ㅏ,ㅇ,ㅎ,ㅏ,ㅂ,ㄴ,ㅣ,ㄷ,ㅏ.这是用Unicode表示的.此表示通常由文本编辑器等使用.其他表示以Unicode分解.它就像ㅅ,ㅏ,ㄹ,ㅏ,ㅇ,ㅎ,ㅏ,ㅂ,ㄴ,ㅣ,ㄷ,ㅏ.

此表示通常由文件系统使用.例如,如果您在Windows上将文件名放在Hangul中,并从Mac访问包含它的文件夹,它将显示为ㅅㅏㄹㅏㅇㅎㅏㅂㄴㅣㄷㅏ虽然在Windows上显示为사랑합니다.

但是,如果有内存服务,还有另一组字符,这只是韩文辅音和元音的列表.尽管它们看起来与分解的音节看起来相同或类似,但它们实际上是不同的,因为它们被绘制的位置在中间是绘制字符的空间.其目的是在朝鲜语字母表中出现韩文字符或类似用于教育目的(或任何其他目的)的字符.

所以,我不确定要将你选择或实现的输入方法状态机或输入法引擎中的字符(即分解的汉语辅音和元音列表的字符).如果你实现它,它是你的选择,但如果你为引擎使用一些外部库,你需要弄明白.

另外,正如我在博客文章中提到的,每个组合和分解表示中有两个变体,它们都是用Unicode标准定义的.所以,好吧..是啊..我同意.这是相当多的工作.

至于我,我试图为Mac制作输入法(当Apple宣布他们将摆脱Finder插件架构以解决安全问题),但当时libhangul(是的......我试图使用它)正在改变很多.所以,直到它稳定下来,我决定推迟.但是因为当我回到家时我工作很忙,累了,所以我没有在自己的输入法上取得进展.所以,我相信libhangul项目的状态现在比以往任何时候都要好得多.所以,至少要看看它是好的尝试.

此外,如果您没有Windows,最好尝试hanterm或任何支持Hangul输入的xterm衍生物本身.源代码将在其托管网站上提供.

祝你的项目好运,如果有更多的事要问我,请这样做.