186.go 遍历中文字符串

func test2() {
	var str string = "hello 北京"
	for i := 0; i < len(str); i++ {
		fmt.Printf("str[%d]=%c
", i, str[i]) // 按照字节遍历, 到中文时乱码
	}
	/*
		str[0]=h
		str[1]=e
		str[2]=l
		str[3]=l
		str[4]=o
		str[5]=
		str[6]=å
		str[7]=
		str[8]=
		str[9]=ä
		str[10]=º
		str[11]=¬
	*/
	for i, c := range str {
		fmt.Printf("str[%d]=%c
", i, c) // 按照字符遍历, 可以遍历中文(可以发现中文占用三个字节, 但是下标不确定了不好)
	}
	/*
		str[0]=h
		str[1]=e
		str[2]=l
		str[3]=l
		str[4]=o
		str[5]=
		str[6]=北
		str[9]=京
	*/
	str2 := []rune(str)
	for i := 0; i < len(str2); i++ {
		fmt.Printf("str[%d]=%c
", i, str2[i]) // 强转rune类型, 按照字符划分
	}
	/*
		str[0]=h
		str[1]=e
		str[2]=l
		str[3]=l
		str[4]=o
		str[5]=
		str[6]=北
		str[7]=京
	*/
}

func main() {
	// test1()
	test2()
}

原文地址:https://www.cnblogs.com/liuzhanghao/p/15250744.html