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

Jon*_*tes 4 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
}
Run Code Online (Sandbox Code Playgroud)

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

Sal*_*ali 11

首先,你应该真正阅读Go中的字符串,字节和符文.

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

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

    s = "????:????????" 
    fmt.Println(string([]rune(s)[2:9]))
Run Code Online (Sandbox Code Playgroud)

输出是:

cdefghi
??:????
Run Code Online (Sandbox Code Playgroud)

  • 有效.谢谢.注意:相反使用len(s),我使用utf8.RuneCountInString(s)来获取字符串大小.函数len(s)计算字节数,而不是字符数.http://golang.org/pkg/builtin/#len (4认同)