我运行此代码并获得输出,但是为什么字节值是E4B8AD而int值是20013。为什么第2列不等于第5列?
软件包主要
import(
"fmt"
)
func main(){
str2 := "中文"
fmt.Println("index int(rune) rune char bytes")
for index, rune := range str2{
fmt.Printf("%-2d %d %U '%c' %X\n", index, rune, rune, rune, []byte(string(rune)))
}
}
输出为:
index int(rune) rune char bytes
0 20013 U+4E2D '中' E4B8AD
1 25991 U+6587 '文' E69687
答案 0 :(得分:4)
字符的Unicode代码点不必与给定字符编码中该字符的字节表示相同。
对于字符中
,代码点是U+4E2D
,但是各种字符编码中的字节表示形式是:
E4B8AD
(UTF-8)4E2D
(UTF-16)00004E2D
(UTF-32)here有一个很好的答案,它解释了如何在代码点和字节表示之间进行转换。还有Joel Spolsky出色的The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)。