Юникод в Java
Буквам всех языков дают единые номера. Общий список таких номеров называется Юникодом (Unicode, единые номера букв для всех языков). У каждой буквы свой номер, один и тот же в разных программах.
Номер еще нужно разложить по байтам. Две обычные формы так и называются: UTF-8 и UTF-16.
В UTF-8 английская буква и цифра занимают 1
байт. Русская буква занимает 2 байта.
Знак евро и иероглиф занимают по 3 байта.
В UTF-16 английская буква, русская буква, знак
евро и иероглиф занимают по 2 байта, 16 бит.
Редкий символ за пределами этого набора занимает
4 байта и в UTF-8, и в UTF-16. В примерах
этого раздела такие символы не используем.
В Java строка хранит текст в UTF-16. Английская
и русская буквы внутри строки одинаковы по размеру:
обе по 2 байта. Форму UTF-8 используют файлы
и страницы в сети. На размер строки в программе
она не влияет.
Пять букв hello - это 5 символов
и 10 байт строки в Java. Пять букв
котик - тоже 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
|
| 文字 |
2
|
6
|
4
|
| € |
1
|
3
|
2
|
Сколько байт занимает русская буква в UTF-8?
Сколько байт занимает русская буква в UTF-16?
Сколько байт занимает иероглиф в UTF-8?
В слове котик пять букв. Сколько байт оно занимает в UTF-8?
Сколько байт занимает слово hello в UTF-16?
Сколько байт занимают иероглифы 文字 в UTF-8 и сколько в UTF-16?
Сколько байт занимает слово котик в строке Java?