用于高位表情符号的 Go rune 文字

Jan*_*nar 3 unicode go emoji rune

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

a1 := '\u2665'

  • 这有效

a2 := '\u1F3A8'

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

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

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

icz*_*cza 5

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

\n
\n

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

\n
\n

例如:

\n
a1 := \'\\u2665\'\nfmt.Printf("%c\\n", a1)\n\na2 := \'\\U0001F3A8\'\nfmt.Printf("%c\\n", a2)\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
\xe2\x99\xa5\n\n
Run Code Online (Sandbox Code Playgroud)\n

注意(回复@torek):

\n

我相信 Go 作者选择要求恰好 4 和 8 个十六进制数字,因为这允许在解释的字符串文字中使用完全相同的形式、完全相同的符文文字。例如,如果您想要一个包含 2 个符文的字符串,其中一个具有代码点0x0001F3A8,另一个符文为4,则它可能如下所示:

\n
s := "\\U0001F3A84"\n
Run Code Online (Sandbox Code Playgroud)\n

如果规范不需要正好 8 个十六进制数字,则最后一个\'4\'是代码点的一部分还是字符串的单个符文将是不明确的,因此您必须将 分解string为像 这样的串联"\\U1F3A8" + "4"

\n

规格:字符串文字:

\n
\n

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

\n
\n