3.6.4. unicode包
unicode包提供了一些用来查询unicode码点以确定其是否符合某些标准的函数,例如,一个字符是否可以表示成一个数字或一个小写字母。表3.11列出了一些最常用的函数。除了那些我们期望的函数外,如unicode.ToLower() 和unicode.IsUpper(),Go语言也提供了一个通用函数unicode.Is(),以便我们检查一个字符是否属于某个特定的 Unicode类别。
表3.11 unicode包中的函数
变量c是rune类型并表示成一个Unicode码点
unicode.Is( table, c) | 如果c在table中,则返回true |
unicode.IsControl(c) | 如果c是一个控制字符,则返回true |
unicode.IsDigit(c) | 如果c是一个十进制数,则返回true |
unicode.IsGraphic(c) | 如果c是一个“图形”字符,如字母、数字、标点符号、符号或空格,则返回true |
unicode.IsLetter(c) | 如果c是一个字母,则返回true |
unicode.IsLower(c) | 如果c是一个小写字母,则返回true |
unicode.IsMark(c) | 如果c是一个标记符,则返回true |
unicode.IsOneOf( tables, c) | 如果c在tables中任意一个的table中,则返回true |
unicode.IsPrint(c) | 如果c是一个可打印字符,则返回true |
unicode.IsPunct(c) | 如果c是一个标点符号,则返回true |
unicode.IsSpace(c) | 如果c是一个空格,则返回true |
unicode.IsSymbol(c) | 如果c是一个符号,则返回true |
unicode.IsTitle(c) | 如果c是一个首字母大写字符,则返回true |
unicode.IsUpper(c) | 如果c是一个大写字符,则返回true |
unicode.SimpleFold(c) | 将c以Unicode 码点的形式进行大小写转换 |
unicode.To( case, c) | c的case形式,其中case 是unicode.LowerCase、 unicode.TitleCase、或unicode.UpperCase |
unicode.ToLower(c) | c的小写形式 |
unicode.ToTitle(c) | c的首字母大写形式 |
unicode.ToUpper(c) | c的大写形式 |
1 2 | fmt.Println(IsHexDigit('8'), IsHexDigit('x'), IsHexDigit('X'), IsHexDigit('b'), IsHexDigit('B')) |
1 | true·false·false·true·true |
unicode 包提供了unicode.IsDigit() 函数来检查一个字符是否是一个十进制数,但是却没有提供类似的函数来检查是否是十六进制数,所以这里我们使用了自定义的 IsHexDigit() 函数。
1 2 3 | func IsHexDigit(char rune) bool { return unicode.Is(unicode.ASCII_Hex_Digit, char) } |
这个简短的函数使用了unicode.Is()函数并结合unicode.ASCII_Hex_Digit的取值范围,以确定给定的字符是否是十六进制数。我们还可以很容易地创建类似的函数来检测其他Unicode字符。