【Rust】字符串和文本
Unicode
和 ASCII
匹配所有 ASCII
字符,从 0
到 0x7f
。例如,都将字符 *
分配给码点 42
。类似地,Unicode
将 0
到 0xff
分配给与 ISO/IEC 8859-1
字符集相同的字符,用于西欧语言的 8
位 ASCII
超集。Unicode
将此码点范围称为 Latin-1
代码块。
因为 Unicode
是 Latin-1
的超集,所以从 Latin-1
转换到 Unicode
是完全允许的:
1 | fn latin1_to_char(latin1: u8) -> char { |
假设码点在 Latin-1
范围内,反向转换也很简单:
1 | fn char_to_latin1(c: char) -> Option<u8> { |
Rust
中 String
和 str
类型都是使用 UTF-8
编码格式,它是一种变长编码,使用1
到4
个字节对字符进行编码。有效的 UTF-8
序列有两个限制。首先,对于任何给定码点,只有最短的编码被认为是有效的,也就是不能花费4
个字节来编码一个适合3
个字节的码点。 此规则确保给定代码点只有一个 UTF-8
编码。其次,有效的 UTF-8
不得编码为 0xd800
到 0xdfff
或超过 0x10ffff
的数字:这些数字要么保留用于非字符目的,要么完全超出 Unicode
的范围。
