1 回答

TA贡献1895条经验 获得超3个赞
您可以使用序列后跟 8 个十六进制数字,这是 Unicode 码位的十六进制表示形式。这在 Spec: Rune literals 中有详细说明:\U
有四种方法可以将整数值表示为数字常量:后跟两个十六进制数字; 后跟正好四个十六进制数字; 后跟正好八个十六进制数字,以及一个普通的反斜杠,后面正好跟着三个八进制数字。在每种情况下,文本的值都是由相应基数中的数字表示的值。\x\u\U\
例如:
a1 := '\u2665'
fmt.Printf("%c\n", a1)
a2 := '\U0001F3A8'
fmt.Printf("%c\n", a2)
哪些输出(在Go Playground上尝试):
♥
🎨
注(对@torek的答复):
我相信Go的作者选择要求正好4和8个十六进制数字,因为这允许在解释的字符串文本中使用完全相同的形式,完全相同的符文文字。例如,如果你想要一个包含2个符文的字符串,一个有代码点,另一个有符文,它可能看起来像这样:0x0001F3A84
s := "\U0001F3A84"
如果规范不需要正好 8 个十六进制数字,那么最后一个是码位的一部分还是字符串的单个符文都是模棱两可的,因此您必须将 断开为类似 .'4'string"\U1F3A8" + "4"
规范: 字符串文本:
解释型字符串文本是双引号之间的字符序列,如 中所示。在引号中,除了换行符和未转义的双引号之外,任何字符都可能出现。引号之间的文本构成文本的值,反斜杠转义被解释为它们在符文文本中(除了是非法的并且是合法的),具有相同的限制。三位数的八进制 () 和两位数的十六进制 () 转义表示结果字符串的各个字节;所有其他转义表示单个字符的(可能是多字节)UTF-8 编码。因此在字符串文本中表示一个值的单个字节,而 、 和 表示两个字节的 UTF-8 编码字符 U+00FF。"bar"\'\"\nnn\xnn\377\xFF0xFF=255ÿ\u00FF\U000000FF\xc3\xbf0xc3 0xbf
- 1 回答
- 0 关注
- 147 浏览
添加回答
举报