我如何将一个字符后面跟一个“重音符号”合并为一个字符?

问题描述 投票:7回答:1

我如何将一个字符跟一个“合并重音符号”合并为一个字符?

我使用的短语是用户输入网页并将其提交给法语-英语词典。有时字典查找会失败,因为大多数重音符号有两种表示形式。例如:

  • é可以用单个字符完成:\xE9(带小写字母e的小写字母e)。
  • 但是它也可以由两个字符表示:e + \u0301(结合重音符号。)>
  • 我一直想将前一个(单个字符)提交给字典。

现在,我通过用等效的单个字符替换我发现的所有两个字符来做到这一点。但是,在JavaScript或浏览器中,从输入字段中获取其内容时,是否有更简单的方法(即单行)?]

function translate(phrase) {
    // Combine accents into a single accented character, if necessary.
    var TRANSFORM = [
        // Acute accent.
        [/E\u0301/g, "\xC9"], // É
        [/e\u0301/g, "\xE9"], // é

        // Grave accent.
        [/a\u0300/g, "\xE0"], // à
        [/e\u0300/g, "\xE8"], // è
        [/u\u0300/g, "\xF9"], // ù

        // Cedilla (no combining accent).

        // Circumflex.
        [/a\u0302/g, "\xE2"], // â
        [/e\u0302/g, "\xEA"], // ê
        [/i\u0302/g, "\xEE"], // î
        [/o\u0302/g, "\xF4"], // ô
        [/u\u0302/g, "\xFB"], // û

        // Trema.
        [/e\u0308/g, "\xEB"], // ë
        [/i\u0308/g, "\xEF"], // ï
        [/u\u0308/g, "\xFC"] // ü

        // oe ligature (no combining accent).
    ];
    for (var i = 0; i < TRANSFORM.length; i++)
        phrase = phrase.replace(TRANSFORM[i][0], TRANSFORM[i][1]);

    // Do translation.
    ...
}

如何将一个字符后面跟一个“重音符号”组合成一个字符?我要说的是用户输入网页并将其提交给法语-英语词典的短语。 ...

javascript unicode utf-8 internationalization normalize
1个回答
9
投票

这称为normalization,看起来您想要NFC规范化:

© www.soinside.com 2019 - 2024. All rights reserved.