Текстовые типы
Типы char и str содержат текстовые данные.
Значение типа char - это скалярное значение Юникода (т.е. кодовая точка, которая
не является суррогатом), представленное как 32-битное беззнаковое слово в диапазоне от 0x0000 до 0xD7FF
или от 0xE000 до 0x10FFFF.
Немедленное неопределенное поведение - создание
char, который выходит за пределы этого диапазона. [char] фактически является строкой UCS-4 / UTF-32
длиной 1.
Значение типа str представлено так же, как [u8], срез
8-битных беззнаковых байтов. Однако стандартная библиотека Rust делает дополнительные предположения
о str: методы, работающие с str, предполагают и гарантируют, что данные там
являются допустимыми UTF-8. Вызов метода str с буфером не в UTF-8 может вызвать
неопределенное поведение сейчас или в будущем.
Поскольку str является динамически sized типом, он может быть создан только через
тип указателя, такой как &str. Расположение &str такое же, как расположение
&[u8].
Расположение и валидность битов
char гарантированно имеет тот же размер и выравнивание, что и u32 на всех платформах.
Каждый байт char гарантированно инициализирован (другими словами,
transmute::<char, [u8; size_of::<char>()]>(...) всегда безопасен — но поскольку
некоторые битовые шаблоны являются недопустимыми для char, обратное не всегда безопасно).