Юникод в Kotlin
Буквам всех языков дают единые номера. Общий список таких номеров называется Юникодом (Unicode, единые номера букв для всех языков). У каждой буквы свой номер, один и тот же в разных программах.
Номер еще нужно разложить по байтам. Две обычные формы так и называются: UTF-8 и UTF-16.
В UTF-8 английская буква и цифра занимают 1
байт. Русская буква занимает 2 байта.
Знак евро занимает 3 байта.
В UTF-16 английская буква, русская буква и знак
евро занимают по 2 байта, 16 бит.
Редкий символ за пределами этого набора занимает
4 байта и в UTF-8, и в UTF-16. В примерах
этого раздела такие символы не используем.
В Kotlin строка хранит текст в UTF-16. Английская
и русская буквы внутри строки одинаковы по размеру:
обе по 2 байта. Форму UTF-8 используют файлы
и страницы в сети. На размер строки в программе
она не влияет.
Пять букв hello - это 5 символов
и 10 байт строки в Kotlin. Пять букв
котик - тоже 5 символов и 10
байт строки, хотя в UTF-8 они занимают 10
байт против 5 у hello. Две цифры
в записи "12" - это два символа и 4
байта строки.
Одни и те же тексты в двух формах занимают разное число байт:
| Текст | Символов | Байт в UTF-8 | Байт в UTF-16 |
|---|---|---|---|
a
|
1
|
1
|
2
|
я
|
1
|
2
|
2
|
cat
|
3
|
3
|
6
|
кот
|
3
|
6
|
6
|
hello
|
5
|
5
|
10
|
котик
|
5
|
10
|
10
|
€
|
1
|
3
|
2
|