gpt4 book ai didi

javascript - 如何在javascript中获取字母的重音/变音符号?

转载 作者:行者123 更新时间:2023-12-05 00:26:36 24 4
gpt4 key购买 nike

我想在 javascript 中获取字母的重音/变音符号。
例如:

  • ñ -> ~
  • á -> ´
  • è -> `

  • 我尝试使用 .normalize("NFD")但它不会返回正确的重音/变音符号
    string = "á"
    string.normalize("NFD").split("")
    // ['a', '́']
    string.normalize("NFD").split("").includes("´")
    // false
    '́' === "´"
    // false
    我要 NFD或任何其他函数来给出重音/变音符号,而不是组合重音/变音符号

    最佳答案

    简短的回答是因为 COMBINING TILDE != TILDE这是 each of the Unicode characters 的分割可能参与ñ例如:


    象征
    代码
    代码点
    姓名


    ñ\u00F1241 LATIN SMALL LETTER N WITH TILDE

    n\u006E110 LATIN SMALL LETTER N

    ̃\u0303771 COMBINING TILDE

    ~\u007E126 TILDE


    为了能够将变音符号与其附加字符分开,您可以使用 string.normalize "NFD" 它提供了“规范分解”,将单个字形分解为不同的字符组合,从而产生相同的符号。
    有112个不同的combining diacritical marks .我找不到在组合 Angular 色和它的独奏 Angular 色之间进行转换的本地方式。您可以查找库或自己编写映射以获取要处理的标记,如下所示:

    const combiningMarks = {
    771: 126, // tilde
    769: 180, // acute accent
    768: 96, // grave accent
    }
    然后分解为单独的字符并为每个组合字符查找关联的标记,如下所示:

    const combiningMarks = {
    771: 126, // tilde
    769: 180, // acute accent
    768: 96, // grave accent
    }

    const startingString = "ñáè" // "\u00F1\u00E1\u00E8"
    const decomposedString = startingString.normalize("NFD") // "\u006E\u0303\u0061\u0301\u0065\u0300"
    const codepoints = [...decomposedString].map(c => c.codePointAt(0)) // [110, 771, 97, 769, 101, 768]
    const charsWithFullMarks = codepoints.map(c => combiningMarks[c] || c) // [110, 126, 97, 180, 101, 96]
    const finalString = String.fromCodePoint(...charsWithFullMarks) // "n~a´e`"
    console.log(finalString);

    关于javascript - 如何在javascript中获取字母的重音/变音符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71315832/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com