Skip to the content.

问题

golang中文字符串在使用下标遍历时会出现乱码的情况

解决

package main

import (
	"fmt"
)

func main() {
	str := "hi,你好"
	fmt.Println(len(str))         // 9
	fmt.Println(len([]rune(str))) // 5

	// 包含中文使用下标遍历会乱码
	for i := 0; i < len(str); i++ {
		fmt.Printf("str[%d]=%v\n", i, string(str[i]))
	}

	// 方法1: for...range遍历
	for i, v := range str {
		fmt.Printf("str[%d]=%v\n", i, string(v))
	}

	// 方法2: 转为[]rune类型,再下标遍历
	strRune := []rune(str)
	for i := 0; i < len(strRune); i++ {
		fmt.Printf("strRune[%d]=%v\n", i, string(strRune[i]))
	}

}