在 golang 中切片 unicode/ascii 字符串?

Slice unicode/ascii strings in golang?

我需要在 Go 中对字符串进行切片。可能的值可以包含拉丁字符 and/or Arabic/Chinese 个字符。在以下示例中,阿拉伯字符串字母表的切片注释 [:1] 返回非预期的 value/character.

    package main
    
    import "fmt"
    
    func main() {
        a := "a"
        fmt.Println(a[:1]) // works
        
        b := "ذ"
        fmt.Println(b[:1]) // does not work
        fmt.Println(b[:2]) // works
    
        fmt.Println(len(a) == len(b)) // false
    }

http://play.golang.org/p/R-JxaxbfNL

首先,你应该认真阅读 strings, bytes and runes in Go

这里是你如何实现你想要的:Go playground(我无法正确粘贴阿拉伯符号,但如果中文可以,阿拉伯语应该可以也是)。

    s := "abcdefghijklmnop" 
    fmt.Println(s[2:9]) 

    s = "维基百科:关于中文维基百科" 
    fmt.Println(string([]rune(s)[2:9]))

输出为:

cdefghi
百科:关于中文

您可以使用 utf8string 包:

package main
import "golang.org/x/exp/utf8string"

func main() {
   a := utf8string.NewString("")
   // example 1
   r := a.At(1)
   // example 2
   s := a.Slice(1, 3)
   // example 3
   n := a.RuneCount()
   // print
   println(r == '', s == "", n == 5)
}

https://pkg.go.dev/golang.org/x/exp/utf8string