检查是否分配了Unicode代码点

时间:2018-04-10 21:27:46

标签: go unicode codepoint

Go包含unicode包,其中包含有用的功能,例如IsGraphicIsPrint。但缺少的一个功能是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(软连字符)是未分配的,这是错误的。

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

1 个答案:

答案 0 :(得分: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