首页 >后端开发 >Golang >为什么 Go 中的字符串索引不总是返回预期的字符?

为什么 Go 中的字符串索引不总是返回预期的字符?

Barbara Streisand
Barbara Streisand原创
2024-12-14 16:18:14663浏览

Why Doesn't String Indexing in Go Always Return the Expected Character?

索引 Golang 字符串中的字符

要从字符串中检索字符,可以使用索引操作。但是,您可能会遇到索引值与预期字符不匹配的情况。例如,在下面的代码中:

package main

import "fmt"

func main() {
    fmt.Print("HELLO"[1])
}

输出是 69,而不是字母“E”。

理解 Golang 字符串编码

Golang 对字符串文字使用 UTF-8 编码。 ASCII 字符(包括字母“E”)占用一个字节。但是,较大的 Unicode 字符可能由多个字节表示。

使用符文进行字符索引

要正确索引字符,请使用符文:表示 Unicode 代码点的整数。 rune 是 UTF-8 中字符的基础类型。您可以使用 rune() 函数将字节转换为符文。

将字节转换为字符

要将字节转换为其对应的字符,您可以使用string() 函数:

fmt.Println(string("Hello"[1])) // ASCII only

这种方法适用于 ASCII

将符文转换为字符

对于 Unicode 字符,您可以使用 []rune() 切片将符文转换为字符:

fmt.Println(string([]rune("Hello, 世界")[1])) // UTF-8

Unicode 示例字符

考虑以下示例:

fmt.Println(string([]rune("Hello, 世界")[8])) // UTF-8

这将打印“界”,它是汉字“世界”的 Unicode 代码点。

其他资源

  • [Go 编程语言规范关于转换的部分](https://golang.org/ref/spec#Conversions)
  • [Go 博客:Go 中的字符串、字节、符文和字符](https://blog.golang.org /strings-bytes-runes-and-characters-in-go)

以上是为什么 Go 中的字符串索引不总是返回预期的字符?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn