2

我们如何使用超出我认为代码点 U+265F 的符文文字的表情符号?

a1 := '\u2665'

  • 这行得通

a2 := '\u1F3A8'

  • 这会给出错误无效字符文字,多于一个字符。

有没有办法将较高位置的表情符号表示为符文文字?

https://unicode.org/emoji/charts/full-emoji-list.html

4

1 回答 1

4

您可以使用\U后跟8 个十六进制数字的序列,这是 Unicode 代码点的十六进制表示。这在规范中有详细说明:符文文字:

有四种方法可以将整数值表示为数字常量:\x紧跟两个十六进制数字;\u紧随其后的是四个十六进制数字;\U后跟恰好八个十六进制数字,以及一个普通的反斜杠,\后跟恰好三个八进制数字。在每种情况下,文字的值都是由相应基数中的数字表示的值。

例如:

a1 := '\u2665'
fmt.Printf("%c\n", a1)

a2 := '\U0001F3A8'
fmt.Printf("%c\n", a2)

哪些输出(在Go Playground上尝试):

注意(回复@torek):

我相信 Go 的作者选择精确地要求 4 和 8 个十六进制数字,因为这允许使用完全相同的形式,在解释的字符串文字中使用完全相同的符文文字。例如,如果你想要一个包含 2 个符文的字符串,一个有代码点0x0001F3A8,另一个符文是4,它可能看起来像这样:

s := "\U0001F3A84"

如果规范不需要正好 8 个十六进制数字,那么最后一个'4'是代码点的一部分还是字符串的单个符文将是模棱两可的,因此您必须string"\U1F3A8" + "4".

规范:字符串文字:

解释的字符串文字是双引号之间的字符序列,如"bar". 在引号内,可以出现除换行符和非转义双引号外的任何字符。引号之间的文本形成文字的值,反斜杠转义解释为符文文字(除了\'非法和\"合法之外),具有相同的限制。三位八进制 ( \nnn) 和两位十六进制 ( \xnn) 转义表示结果字符串的各个字节;所有其他转义表示单个字符的(可能是多字节)UTF-8 编码。因此,在字符串文字中\377\xFF表示单个字节的 value 、0xFF=255while ÿ\u00FF\U000000FF\xc3\xbf表示字符 U+00FF 的 UTF-8 编码的两个字节0xc3 0xbf

于 2021-03-02T12:47:52.013 回答