Go 中文字符串处理

Submitted by Lizhe on Fri, 09/01/2017 - 11:37

Go语言本身是使用utf8的, 不过在处理字符串的时候仍然需要注意一些事情

问题很简单,直接看例子吧

package main

import (
    "fmt"
    "unicode/utf8"
)

func main() {
    str := "这是一个测试字符串"
    fmt.Println(str)
    fmt.Println(utf8.RuneCountInString(str))
    fmt.Println(utf8.DecodeRuneInString(str))

    for i, r := range "Hello,世界" {
        fmt.Printf("%d\t%q\t%d\n", i, string(r), r)
    }
    
    for i, r := range "Hello,世界" {
        fmt.Println( i, r, r)
    }

    for i, r := range "Hello,世界" {
        fmt.Println( i, string(r), r)
    }
}
 

输出

这是一个测试字符串
9
36825 3
0    "H"    72
1    "e"    101
2    "l"    108
3    "l"    108
4    "o"    111
5    ","    44
6    "世"    19990
9    "界"    30028
0 72 72
1 101 101
2 108 108
3 108 108
4 111 111
5 44 44
6 19990 19990
9 30028 30028
0 H 72
1 e 101
2 l 108
3 l 108
4 o 111
5 , 44
6 世 19990
9 界 30028
 

eclipse的控制台如果输出乱码的话你需要修改run的设置

477

478

 

如果要截取(substring或split)一个中文字符串的某个片段, 例如 第二个汉字到第三个汉字

    str := "这是一个测试字符串"

    rs := []rune(str)
    fmt.Println(string(rs[1:3]))

会得到输出

是一