Go中的切片字符串:如何切片阿拉伯语(或其他unicode)字符串?

时间:2015-07-14 22:17:36

标签: unicode go slice

我需要在Go中切一个字符串。有时我有拉丁字符,否则我有阿拉伯语字符,但阿拉伯语的[:1]会返回不同的值。

package main

import "fmt"

func main() {
    a := "a"
    fmt.Println(a[:1]) // work

    b := "ذ"
    fmt.Println(b[:1]) // not work
    fmt.Println(b[:2]) // work

    fmt.Println(len(a) == len(b)) // false
}

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

2 个答案:

答案 0 :(得分:10)

首先,您应该真正了解strings, bytes and runes in Go

以下是你如何达到你想要的效果: Go playground (我无法正确粘贴阿拉伯符号,但如果中文有效,阿拉伯语也应该有用)。

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

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

输出结果为:

cdefghi
百科:关于中文

答案 1 :(得分:0)

您可以使用 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