Golang遍歷字符串輸出中文亂碼的解決辦法

      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個字節。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章