package main import ( "fmt" ) func main() { str := "我愛你" fmt.Println(str) // 可以直接顯示 fmt.Println(str[0:2]) // 顯示亂碼?? }
想問一下,這種直接截取字符串的方法,為什么會導(dǎo)致亂碼?
光陰似箭催人老,日月如移越少年。
不懂go,但八成是編碼問題
一個中文字是用多個字節(jié)表示,UTF8用3個字節(jié),Unicode用2個字節(jié),GBK用2個字節(jié)。
但go可能并不知道,還將它當(dāng)成單字節(jié)字符來看。因此你會截出一個半字。這半個字就表現(xiàn)為亂碼。
解決方案: 可一律轉(zhuǎn)成unicode編碼,或使用庫中可操縱多字節(jié)字符的函數(shù)