2

Go 有unicode包,其中包含有用的函数,例如IsGraphicor IsPrint。但缺少的一个功能是IsAssigned. 当然,我可以使用其他函数编写自己的函数。但我宁愿期望标准库提供这个功能。在 Java 中,编写这个函数很容易:

boolean isAssigned(int codePoint) {
    return Character.getType(codePoint) != Character.UNASSIGNED;
}

在 Go 中没有函数unicode.Type(rune)unicode.IsAssigned(rune). 我能找到的最接近的是:

func IsAssigned(r rune) bool {
    return unicode.IsControl(r) ||
            unicode.IsGraphic(r) ||
            unicode.IsSymbol(r)
}

但是该代码认为 U+00AD (软连字符)未分配,这是错误的。

如何获得有关未分配代码点的正确信息?

4

1 回答 1

2

我认为您可以验证是否分配了代码点,并且(尽管它效率不高),unicode.Isunicode.Categories

func IsAssigned(r rune) bool {
    for _, v := range unicode.Categories {
        if unicode.Is(v, r) {
            return true
        }
    }
    return false
}

工作示例在The Go Playground中。

于 2018-04-10T23:31:27.037 回答