作者:Stefan Nilsson
字符,ASCII 和 Unicode
rune 类型是 int32 的别名,用于强调其代表的是码位(code point),而不是整数。
ASCII 定义 128 个字符,由码位 0 – 127 标识。它涵盖英文字母,拉丁数字和其他一些字符。
Unicode 是 ASCII 的超集,它定义了 1,114,112 个代码点的代码空间。 Unicode 版本 10.0 涵盖 139 个现代和历史文本集(包括符文字母,但不包括 Klingon )以及多个符号集。
字符串和 UTF-8 编码
字符串是字节序列,而不是符文。
但是,字符串通常包含以 UTF-8 编码的 Unicode 文本,该文本使用一到四个字节对所有 Unicode 码位进行编码。(ASCII 字符使用一个字节编码,而其他码位则使用更多字节。)
由于 Go 源代码本身被编码为 UTF-8,因此字符串文字将自动获得此编码。
例如,在字符串"café"中,字符é(码位 233)使用两个字节编码,而 ASCII 字符 c,a 和 f(码位 99、97 和 102)仅使用一个字节:
fmt.Println([]byte("café")) // [99 97 102 195 169]
fmt.Println([]rune("café")) // [99 97 102 233]
扫描下方二维码,关注Feed, 定期推送最新随笔