1、下面这段go的循环代码,为何出现乱码? 我们探究一下
package main
import "fmt"
func main() {
str := "hello world你"
// 对字符串的遍历
for i := 0; i < len(str); i++ {
fmt.Printf("%c ", str[i])
}
}
输出:
h e l l o w o r l d ä ½
2、%c是什么意思,代表字符还是字节 翻阅一下官方文档:
那说明对应的是字符。
既然是字符,为何不能把汉字"你"输出出来呢?
那就说明str[i]此时对应的值并不是你
推导出,问题出在str[i]上面,i的值是由len(str)控制的。
我们需要能够输出你,自然是把你当成了一个整体。那么我们期待的len(str)的值应该是12。
但是实际上len(str)的值是多少?
package main
import "fmt"
func main() {
str := "hello world你"
fmt.Println(len(str))
}
输出
14
为什么是14呢?我们看一下len(str)这个方法的注释:
当len()中参数为string类型的时候,返回的是字节数。一个汉字是3个字节。所以我们查看str[i]的时候就相当于把这个汉字进行了拆分。因此所对应的字符自然就不是原先的汉字了。而是被拆分的字节里面的值对应的字符。