1

我正在处理泰语键盘输入。有些键是元音符号,只有在与某些前面的字符组合时才允许使用。

0x0E33是元音符号

例如0x0E1C + 0x0E33有效
0x0E44 + 0x0E33无效并且0x0E33应该被忽略。

我正在寻找一种方法来知道何时应该忽略元音符号,或者它何时不与前一个字符组合。

请问有什么想法吗?

4

2 回答 2

0

许多泰语元音(和声调,顺便说一句)属于非间距组合标记类别。你的目标是使用一些库来告诉每个角色属于哪个类别。然后,您可以决定是否“忽略”它,无论“忽略”在您的应用程序上下文中意味着什么。

检查Unicode 常规类别值

您的两个兴趣点是:

  • 罗 | Other_Letter普通字符;
  • 锰 | Nonspacing_Mark用于零宽度非间距标记;

进一步阅读:

于 2017-02-11T21:57:58.263 回答
0

我知道他的帖子是几年前的,但这是我使用 icu lib 想出的,我怀疑它可以改进......

UChar32 newChar;
UChar32 previousChar;

int32_t gcb = u_getIntPropertyValue(newChar, UCHAR_GRAPHEME_CLUSTER_BREAK);
if (gcb != U_GCB_OTHER)
{
    int32_t insc = u_getIntPropertyValue(newChar, UCHAR_INDIC_SYLLABIC_CATEGORY);
    if (insc == U_INSC_VOWEL_DEPENDENT || insc == U_INSC_TONE_MARK)
    {
        if (u_getIntPropertyValue(prevChar, UCHAR_INDIC_SYLLABIC_CATEGORY) != U_INSC_CONSONANT)
        {
            // invalid combination, ignore
        }
    }
}
于 2021-02-16T22:19:45.197 回答