這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
通過下邊的代碼可以看出,r實質是int32,佔用4個位元組,值是25105;s是string,佔用3個位元組,值是e68891.
推斷r應該是unicode編碼的,s是utf8編碼的.
package main import( "fmt") func main() { r := '我' fmt.Printf("%t\n", r) // %!t(int32=25105) s := "我" fmt.Printf("%t, %d %x\n", s, len(s), s) // %!t(string=我) 3 e68891 fmt.Printf("%b\n", int32(r)) // 110001000010001 // 0000 0000 0000 0000 0110 0010 0001 0001 for _, b := range []byte(s) { fmt.Printf("%b\n", b) } // 11100110 // 10001000 // 10010001}
現在列印出二進位的值進行比較,整理如下:
0000 0000 0000 0000 0110 0010 0001 0001 // r 1110 0110 1000 1000 1001 0001 // s
然後轉換s轉換為r,也就是utf8轉換為unicode
1110 0110 1000 1000 1001 0001 // s 0110 00 1000 01 0001 // s utf8 -> unicode 0000 0000 0110 0010 0001 0001 // s utf8 -> unicode0000 0000 0000 0000 0110 0010 0001 0001 // r
轉換成功 得出結論 r是unicode編碼 s是utf8 編碼
golang和java一樣 字元是unicode編碼 字串是utf8編碼
底層這些東東一定要弄明白,不然會經常害人的.