一尘不染

如何从字符串中获取单个Unicode字符

go

我不知道如何从字符串中获取Unicode字符。例如,如果字符串是“你好”,我如何获得第一个字符“你”?

从另一个地方我得到一种方法:

var str = "你好"
runes := []rune(str)
fmt.Println(string(runes[0]))

确实有效。但是我仍然有一些问题:

  1. 还有另一种方法吗?

  2. 为什么在Go中str[0]不能从字符串中获取Unicode字符,却可以获取字节数据?


阅读 317

收藏
2020-07-02

共1个答案

一尘不染

首先,您可能需要阅读https://blog.golang.org/strings
。它将回答您的部分问题。

Go中的字符串可以包含任意字节。当您写str [i]时,结果是一个字节,索引始终是一个字节数。

大多数情况下,字符串都是用UTF-8编码的。您可以通过多种方式处理字符串中的UTF-8编码。

例如,您可以使用for … range语句来对符文对字符串符文进行迭代。

var first rune
for _,c := range str {
    first = c
    break
}
// first now contains the first rune of the string

您还可以利用unicode / utf8软件包。例如:

r, size := utf8.DecodeRuneInString(str)
// r contains the first rune of the string
// size is the size of the rune in bytes

如果字符串以UTF-8编码,则无法直接访问字符串的第n个符文,因为符文的大小(以字节为单位)不是恒定的。如果需要此功能,则可以轻松编写自己的帮助程序功能(使用for
… range或unicode / utf8软件包)。

2020-07-02