为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕容708150 2022-08-15 10:24:25
我们如何使用带有符文文字的表情符号,该字面量超出了我认为的代码点U + 265F?a1 := '\u2665'这有效a2 := '\u1F3A8'这给出了错误无效的字符文本,更多的是一个字符。有没有办法将位置较高的表情符号表示为符文文字?https://unicode.org/emoji/charts/full-emoji-list.html
查看完整描述

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


查看完整回答
反对 回复 2022-08-15
  • 1 回答
  • 0 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号