Golang Unicode字符值

时间:2018-12-20 09:05:25

标签: go unicode

我运行此代码并获得输出,但是为什么字节值是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

1 个答案:

答案 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!)