代码之家  ›  专栏  ›  技术社区  ›  Jay

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

  •  1
  • Jay  · 技术社区  · 6 年前

    • “(带TONOS'U+03AF的希腊文小写字母IOTA)

    我假设有时这封信被编码为一个字母,而在其他时候它被编码为一个字母+重音。

    1 回复  |  直到 6 年前
        1
  •  5
  •   mu is too short    6 年前

    信不信由你

    Duplicated vowel+oxia characters in Greek Unicode range

    The Unicode Consortium

    Unicode: Frequently Asked Questions: Normalization

    The Go Blog: Text normalization in 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))
    }
    

    输出:

    εἰμί
    εἰμί
    false
    true