加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

golang 中unicode包用法

发布时间:2020-12-16 18:48:47 所属栏目:大数据 来源:网络整理
导读:本文转自Golove博客:http://www.cnblogs.com/golove/p/3273585.html unicode 包中的函数和方法 // latters.go const ( MaxRune = 'U0010FFFF' // Unicode 码点最大值 ReplacementChar = 'uFFFD' // 代表无效的 Unicode 码点 MaxASCII = 'u007F' // ASCII

本文转自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("%cn",unicode.SimpleFold('Φ')) // φ fmt.Printf("%cn",unicode.SimpleFold('φ')) // ? fmt.Printf("%cn",unicode.SimpleFold('?')) // Φ } ============================================================ // digit.go ------------------------------------------------------------ // IsDigit 判断 r 是否为一个十进制的数字字符 func IsDigit(r rune) bool func main() { s := "Hello 123123!" for _,r := range s { fmt.Printf("%c = %vn",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 := "Hellont世界!" for _,unicode.IsControl(r)) } // nt = true } ------------------------------------------------------------ // IsLetter 判断 r 是否为一个字母字符 (类别 L) // 汉字也是一个字母字符 func IsLetter(r rune) bool func main() { s := "Hellont世界!" 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 = %vn",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 }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读