如何检测/处理多种unicode方式来对字母上的重音进行编码

Jac*_*cob 2 unicode diacritics go

信不信由你,此词的iota(最后一个字母)似乎已经用unicode以两种不同的方式编码:

  • ???? (带TONOS的U + 03AF的希腊小写字母IOTA)
  • ???? (带OXIA'U + 1F77的希腊小写字母IOTA)

我假设有时字母被编码为单个字母,而在其他时候则被编码为字母+重音。

是否有某种地图或数据库可以让我们在我可以导入我的代码的一个或另一个之间进行转换。

pet*_*rSO 5

信不信由你

让我们离开幻想的世界。

希腊Unicode范围内的重复元音+ oxia字符

Unicode联盟

Unicode:常见问题:规范化

Go博客:Go中的文本规范化


例如,

package main

import (
    "bytes"
    "fmt"

    "golang.org/x/text/unicode/norm"
)

func Equal(a, b string) bool {
    var ia, ib norm.Iter
    ia.InitString(norm.NFKD, a)
    ib.InitString(norm.NFKD, b)
    for !ia.Done() && !ib.Done() {
        if !bytes.Equal(ia.Next(), ib.Next()) {
            return false
        }
    }
    return ia.Done() && ib.Done()
}

func main() {
    a := "???\u03AF"
    b := "???\u1F77"
    fmt.Println(a)
    fmt.Println(b)
    fmt.Println(a == b)
    fmt.Println(Equal(a, b))
}
Run Code Online (Sandbox Code Playgroud)

输出:

????
????
false
true
Run Code Online (Sandbox Code Playgroud)