Как Go преобразует 3-байтовую последовательность в соответствующий символ Unicode? - PullRequest
0 голосов
/ 10 июля 2020

Если у нас есть символы, 世界, они соответствуют байтам 228 184 150 231 149 140, по 3 байта каждый. Если у меня просто []byte{228, 184, 150, 231, 149, 140}, как Go узнает, что нужно сгруппировать их по 3 байта каждый? Если я попытаюсь распечатать fmt.Println(string([]byte{228})), у меня появится загадка? условное обозначение. Это когда Go компилятор видит 228 и знает, что ему нужно прочитать больше байтов, чтобы найти правильный char?

1 Ответ

1 голос
/ 10 июля 2020

Первый байт кодовой точки определяет общее количество байтов в кодовой точке. См. статью в Википедии для подробностей. Язык и библиотеки Go используют этот счетчик для преобразования последовательности байтов в кодовые точки (также известные как руны)

Терминал получает недопустимую последовательность байтов UTF-8, когда 228 записывается без двух завершающих байтов. . Ваш терминал отображает недопустимые байты в качестве символа замены �.

См. Статью Go Blog Strings для получения дополнительных сведений о строках, байтах и ​​рунах на языке Go.

...