Голанг в юникоде - PullRequest
       2

Голанг в юникоде

0 голосов
/ 20 декабря 2018

Я запускаю этот код и получаю вывод, но почему значение байтов равно 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 голосов
/ 20 декабря 2018

Кодовая точка Unicode для символа не обязательно совпадает с байтовым представлением этого символа в данной кодировке символов.

Для символа кодовая точка равна U+4E2D, нобайтовые представления в различных кодировках символов:

  • E4B8AD (UTF-8)
  • 4E2D (UTF-16)
  • 00004E2D (UTF-32)

Здесь действительно хороший ответ здесь , который объясняет, как преобразовывать кодовые точки и байтовые представления.Есть также превосходный Абсолютный минимум каждого разработчика программного обеспечения Абсолютно, положительно должен знать о Unicode и наборах символов (никаких оправданий!) от Джоэла Спольски.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...