Golang輸出字符串有兩種方式,一種是傳統方式輸出,另一種是用for...range輸出(類似字典鍵值對的方式)。但是Golang中所有的字符都是以utf-8編碼存儲的,對於中文字符來說,一箇中文字符佔3個字節。用傳統方式輸出的話會出現中文亂碼,原因是傳統方式是以字節的方式進行遍歷的,而中文字符佔了3個字節。解決的辦法是使用切片[]rune(str)轉換一下;而用for...range不會出現亂碼。
我們直接看代碼:
func traverseStrings() {
//方式一:傳統方法
var str string = "hello,world!北京"
str_cpy := []rune(str) //就是把str轉成切片[]rune(str),可以解決字符串的中文亂碼(中文字符是佔3個字節)
for i := 0; i < len(str_cpy); i++ {
fmt.Printf("%c\n", str_cpy[i])
}
//方式二:for..range
str1 := "ABCDEFG上海"
//用這種方式不會出現亂碼
for index, val := range str1 {
fmt.Printf("index = %d, val = %c \n", index, val)
}
}
用傳統方式輸出結果爲:
用for...range方式輸出結果爲:
從圖中我們也可以看出“上”佔了3個字節。