本文转自Golove博客:http://www.cnblogs.com/golove/p/3273585.html
unicode 包中的函数和方法 // latters.go const ( MaxRune = '\U0010FFFF' // Unicode 码点最大值 ReplacementChar = '\uFFFD' // 代表无效的 Unicode 码点 MaxASCII = '\u007F' // ASCII 码点最大值 MaxLatin1 = '\u00FF' // Latin-1 码点最大值 ) ------------------------------------------------------------ // 判断字符 r 是否在 rangtab 表范围内 func Is(rangeTab *RangeTable,r rune) bool func main() { s := "Hello 世界!" for _,r := range s { // 判断字符是否为汉字 if unicode.Is(unicode.Scripts["Han"],r) { fmt.Printf("%c",r) // 世界 } } } ------------------------------------------------------------ // 判断字符 r 是否为大写格式 func IsUpper(r rune) bool func main() { s := "Hello ABC!" for _,r := range s { // 判断字符是否为大写 if unicode.IsUpper(r) { fmt.Printf("%c",r) // HABC } } } ------------------------------------------------------------ // 判断字符 r 是否为小写格式 func IsLower(r rune) bool func main() { s := "Hello abc!" for _,r := range s { if unicode.IsLower(r) { fmt.Printf("%c",r) // elloabc } } } ------------------------------------------------------------ // 判断字符 r 是否为 Unicode 规定的 Title 字符 // 大部分字符的 Title 格式就是其大写格式 // 只有少数字符的 Title 格式是特殊字符 // 这里判断的就是特殊字符 func IsTitle(r rune) bool func main() { s := "Hello ᾏᾟᾯ!" for _,r := range s { if unicode.IsTitle(r) { fmt.Printf("%c",r) // ᾏᾟᾯ } } } // 输出 Unicode 规定的 Title 字符 func main() { for _,cr := range unicode.Lt.R16 { for i := cr.Lo; i <= cr.Hi; i += cr.Stride { fmt.Printf("%c",i) } fmt.Println("") } } ------------------------------------------------------------ // To 将字符 r 转换为指定的格式 // _case 取值:UpperCase、LowerCase、TitleCase func To(_case int,r rune) rune func main() { s := "Hello 世界!" for _,r := range s { fmt.Printf("%c",unicode.To(unicode.UpperCase,r)) } // HELLO 世界! for _,unicode.To(unicode.LowerCase,r)) } // hello 世界! for _,unicode.To(unicode.TitleCase,r)) } // HELLO 世界! } ------------------------------------------------------------ // ToUpper 将字符 r 转换为大写格式 func ToUpper(r rune) rune func main() { s := "Hello 世界!" for _,unicode.ToUpper(r)) } // HELLO 世界! } ------------------------------------------------------------ // ToLower 将字符 r 转换为小写格式 func ToLower(r rune) rune func main() { s := "Hello 世界!" for _,unicode.ToLower(r)) } // hello 世界! } ------------------------------------------------------------ // ToTitle 将字符 r 转换为 Title 格式 // 大部分字符的 Title 格式就是其大写格式 // 只有少数字符的 Title 格式是特殊字符 func ToTitle(r rune) rune func main() { s := "Hello 世界!" for _,unicode.ToTitle(r)) } // HELLO 世界! } ------------------------------------------------------------ // SpecialCase 是特定语言环境下的映射表,例如“土耳其” // SpecialCase 的方法集定制了标准的映射 type SpecialCase []CaseRange ------------------------------------------------------------ // ToUpper 将 r 转换为大写格式 // 优先使用指定的映射表 special func (special SpecialCase) ToUpper(r rune) rune func main() { s := "Hello 世界!" for _,unicode.SpecialCase(unicode.CaseRanges).ToUpper(r)) } // HELLO 世界! } ------------------------------------------------------------ // ToLower 将 r 转换为小写格式 // 优先使用指定的映射表 special func (special SpecialCase) ToLower(r rune) rune func main() { s := "Hello 世界!" for _,unicode.SpecialCase(unicode.CaseRanges).ToLower(r)) } // hello 世界! } ------------------------------------------------------------ // ToTitle 将 r 转换为 Title 格式 // 优先使用指定的映射表 special func (special SpecialCase) ToTitle(r rune) rune func main() { s := "Hello 世界!" for _,unicode.SpecialCase(unicode.CaseRanges).ToTitle(r)) } // HELLO 世界! } ------------------------------------------------------------ // SimpleFold 遍历 Unicode ,查找“下一个”与 r 相当的字符, // “下一个”的意思是:码点值比 r 大且最靠近 r 的字符 // 如果没有“下一个”字符,则从头开始找与 r 相当的字符 // “相当”的意思是:同一个字符在不同情况下有不同的写法 // 这些不同写法的字符是相当的。 // 这个函数通过查询 caSEOrbit 表实现 // // 例如: // SimpleFold('A') = 'a' // SimpleFold('a') = 'A' // // SimpleFold('K') = 'k' // SimpleFold('k') = '\u212A' (开尔文符号:K) // SimpleFold('\u212A') = 'K' // // SimpleFold('1') = '1' // func SimpleFold(r rune) rune func main() { fmt.Printf("%c\n",unicode.SimpleFold('Φ')) // φ fmt.Printf("%c\n",unicode.SimpleFold('φ')) // ϕ fmt.Printf("%c\n",unicode.SimpleFold('ϕ')) // Φ } ============================================================ // digit.go ------------------------------------------------------------ // IsDigit 判断 r 是否为一个十进制的数字字符 func IsDigit(r rune) bool func main() { s := "Hello 123123!" for _,r := range s { fmt.Printf("%c = %v\n",r,unicode.IsDigit(r)) } // 123123 = true } ============================================================ // graphic.go ------------------------------------------------------------ // IsGraphic 判断字符 r 是否为一个“图形字符” // “图形字符”包括字母、标记、数字、标点、符号、空格 // 他们分别对应于 L、M、N、P、S、Zs 类别 // 这些类别是 RangeTable 类型,存储了相应类别的字符范围 func IsGraphic(r rune) bool func main() { s := "Hello 世界!\t" for _,unicode.IsGraphic(r)) } // \t = false } ------------------------------------------------------------ // IsPrint 判断字符 r 是否为 Go 所定义的“可打印字符” // “可打印字符”包括字母、标记、数字、标点、符号和 ASCII 空格 // 他们分别对应于 L,M,N,P,S 类别和 ASCII 空格 // “可打印字符”和“图形字符”基本是相同的,不同之处在于 // “可打印字符”只包含 Zs 类别中的 ASCII 空格(U+0020) func IsPrint(r rune) bool func main() { s := "Hello 世界!\t" for _,unicode.IsPrint(r)) } // 全角空格= false \t = false } ------------------------------------------------------------ // IsOneOf 判断 r 是否在 set 表范围内 func IsOneOf(set []*RangeTable,r rune) bool func main() { s := "Hello 世界!" // set 表设置为“汉字、标点符号” set := []*unicode.RangeTable{unicode.Han,unicode.P} for _,unicode.IsOneOf(set,r)) } // 世界! = true } ------------------------------------------------------------ // IsControl 判断 r 是否为一个控制字符 // Unicode 类别 C 包含更多字符,比如代理字符 // 使用 Is(C,r) 来测试它们 func IsControl(r rune) bool func main() { s := "Hello\n\t世界!" for _,unicode.IsControl(r)) } // \n\t = true } ------------------------------------------------------------ // IsLetter 判断 r 是否为一个字母字符 (类别 L) // 汉字也是一个字母字符 func IsLetter(r rune) bool func main() { s := "Hello\n\t世界!" for _,unicode.IsLetter(r)) } // Hello世界 = true } ------------------------------------------------------------ // IsMark 判断 r 是否为一个 mark 字符 (类别 M) func IsMark(r rune) bool func main() { s := "Hello ៉៊់៌៍!" for _,unicode.IsMark(r)) } // ៉៊់៌៍ = true } // 输出所有 mark 字符 func main() { for _,cr := range unicode.M.R16 { for i := uint16(cr.Lo); i >= cr.Lo && i <= cr.Hi; i += uint16(cr.Stride) { fmt.Printf("%c = %v\n",i,unicode.IsMark(rune(i))) } fmt.Println("") } } ------------------------------------------------------------ // IsNumber 判断 r 是否为一个数字字符 (类别 N) func IsNumber(r rune) bool func main() { s := "Hello 123123!" for _,unicode.IsNumber(r)) } // 123123 = true } ------------------------------------------------------------ // IsPunct 判断 r 是否为一个标点字符 (类别 P) func IsPunct(r rune) bool func main() { s := "Hello 世界!" for _,unicode.IsPunct(r)) } // ! = true } ------------------------------------------------------------ // IsSpace 判断 r 是否为一个空白字符 // 在 Latin-1 字符集中,空白字符为:\t,\n,\v,\f,\r,// 空格,U+0085 (NEL),U+00A0 (NBSP) // 其它空白字符的定义有“类别 Z”和“Pattern_White_Space 属性” func IsSpace(r rune) bool func main() { s := "Hello \t世 界!\n" for _,unicode.IsSpace(r)) } // 空格\t全角空格\n = true } ------------------------------------------------------------ // IsSymbol 判断 r 是否为一个符号字符 func IsSymbol(r rune) bool func main() { s := "Hello (<世=界>)" for _,unicode.IsSymbol(r)) } // <=> = true }