文本类型
char
和 str
类型用于存储文本数据。
char
类型的值是一个 Unicode 标量值(即非代理代码点),表示为 0x0000 到 0xD7FF 或 0xE000 到 0x10FFFF 范围内的 32 位无符号整数。创建超出此范围的 char
会立即导致 未定义行为。[char]
实际上是一个长度为 1 的 UCS-4 / UTF-32 字符串。
str
类型的值的表示方式与 [u8]
相同,即 8 位无符号字节的切片。但是,Rust 标准库对 str
做了额外的假设:处理 str
的方法假定并确保其中的数据是有效的 UTF-8 编码。使用非 UTF-8 编码的缓冲区调用 str
方法可能会导致现在或将来出现 未定义行为。
由于 str
是 动态大小类型,因此只能通过指针类型(例如 &str
)对其进行实例化。
布局和位有效性
在所有平台上,char
都保证具有与 u32
相同的大小和对齐方式。
char
的每个字节都保证已初始化(换句话说,transmute::<char, [u8; size_of::<char>()]>(...)
始终是安全的 - 但由于某些位模式是无效的 char
,因此反过来并不总是安全的)。