猿问

Go 符文文字为高位表情符号

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

a1 := '\u2665'

  • 这有效

a2 := '\u1F3A8'

  • 这给出了错误无效的字符文本,更多的是一个字符。

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

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


慕容708150
浏览 148回答 1
1回答

蛊毒传说

您可以使用序列后跟 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个符文的字符串,一个有代码点,另一个有符文,它可能看起来像这样:0x0001F3A84s := "\U0001F3A84"如果规范不需要正好 8 个十六进制数字,那么最后一个是码位的一部分还是字符串的单个符文都是模棱两可的,因此您必须将 断开为类似 .'4'string"\U1F3A8" + "4"规范: 字符串文本:解释型字符串文本是双引号之间的字符序列,如 中所示。在引号中,除了换行符和未转义的双引号之外,任何字符都可能出现。引号之间的文本构成文本的值,反斜杠转义被解释为它们在符文文本中(除了是非法的并且是合法的),具有相同的限制。三位数的八进制 () 和两位数的十六进制 () 转义表示结果字符串的各个字节;所有其他转义表示单个字符的(可能是多字节)UTF-8 编码。因此在字符串文本中表示一个值的单个字节,而 、 和 表示两个字节的 UTF-8 编码字符 U+00FF。"bar"\'\"\nnn\xnn\377\xFF0xFF=255ÿ\u00FF\U000000FF\xc3\xbf0xc3 0xbf
随时随地看视频慕课网APP

相关分类

Go
我要回答