Golang 符文
在过去,我们只有一个字符集,那就是ASCII(美国信息交换标准代码)。在那里,我们用7个比特来表示128个字符,包括大写和小写英文字母、数字以及各种标点符号和设备控制字符。由于这种字符的限制,大多数人无法使用他们自定义的书写系统。为了解决这个问题,Unicode被发明了。Unicode是ASCII的一个超集,包含了当今世界书写系统中的所有字符。它包括重音、变音符号、控制代码(如制表符和回车符),并为每个字符分配一个标准数字,称为 “Unicode代码点”,或在Go语言中称为 “符文”。符文类型是int32的一个别名。
重要提示
- 永远记住,字符串是一个字节的序列,而不是一个符文的序列。字符串可以包含以UTF-8编码的Unicode文本。但是,Go源代码编码为UTF-8,因此,不需要用UTF-8编码的字符串。
- UTF-8对1到4个字节范围内的所有Unicode进行编码,其中1个字节用于ASCII,其余用于符码。
- ASCII总共包含256个元素,其中128个是字符,0-127个被确定为码位。这里,码位指的是代表一个单一数值的元素。
例子
♄
它是一个符文,十六进制值为♄。
符文字面
它代表了一个符文常量,其中一个整数值可以识别一个Unicode码位。在Go语言中,Rune Literal表示为一个或多个用单引号括起来的字符,如’g’, ‘\t’等。在单引号之间,你可以放置任何字符,除了换行和未转义的单引号。在这里,这些单引号字符本身代表了给定字符的Unicode值,而带有反斜杠的多字符序列(在多字符序列的开头)则以不同的格式编码值。在符文文学中,所有以反斜杠开头的序列都是非法的,只有以下单字符转义在你使用反斜杠时代表特殊的值。
字符 | Unicode | 说明 |
---|---|---|
\a | U+0007 | 警报或铃声 |
\b | U+0008 | backspace |
\f | U+000C | form feed |
\n | U+000A | 换行或换行 |
\r | U+000D | 回车 |
\t | U+0009 | 水平制表符 |
\v | U+000b | vertical tab |
\\ | U+005c | 反斜线 |
\’ | U+0027 | 单引号 |
\” | U+0022 | 双引号(仅在字符串字元中合法) |
例1 :
// Simple Go program to illustrate
// how to create a rune
package main
import (
"fmt"
"reflect"
)
func main() {
// Creating a rune
rune1 := 'B'
rune2 := 'g'
rune3 := '\a'
// Displaying rune and its type
fmt.Printf("Rune 1: %c; Unicode: %U; Type: %s", rune1,
rune1, reflect.TypeOf(rune1))
fmt.Printf("\nRune 2: %c; Unicode: %U; Type: %s", rune2,
rune2, reflect.TypeOf(rune2))
fmt.Printf("\nRune 3: Unicode: %U; Type: %s", rune3,
reflect.TypeOf(rune3))
}
输出
Rune 1: B; Unicode: U+0042; Type: int32
Rune 2: g; Unicode: U+0067; Type: int32
Rune 3: Unicode: U+0007; Type: int32
例2:
输出
Character: ♛, Unicode:U+265B, Position:0
Character: ♠, Unicode:U+2660, Position:1
Character: ♧, Unicode:U+2667, Position:2
Character: ♡, Unicode:U+2661, Position:3
Character: ♬, Unicode:U+266C, Position:4