无效的 Unicode 代码点 0xd83f

我正在尝试将一些 Java 移植到 Go。Java 代码有一个值为 的字符变量'\ud83f'。当我尝试在 Go 中使用这个值时,它不会编译:


package main

func main() {

    c := '\ud83f'

    println(c)

}

$ go run a.go

# command-line-arguments

./a.go:3: invalid Unicode code point in escape sequence: 0xd83f

为什么?我还尝试在 Python 中使用该值创建一个字符串,它也有效。由于某种原因,它在 Go 中不起作用。


噜噜哒
浏览 266回答 2
2回答

动漫人物

您尝试使用的符文文字无效,因为它表示代理代码点。规范说符文文字不能表示代理代码点(“以及其他”(哪个?)):符文文字[...]转义符 \u 和 \U 表示 Unicode 代码点,因此其中的一些值是非法的,尤其是 0x10FFFF 和代理一半以上的值。在下面的示例中,您可以看到另一种被视为非法的情况:'\U00110000' // 非法:Unicode 代码点无效这似乎意味着无效的代码点(例如 10ffff 以上的那些)在符文文字中也是非法的。请注意,由于rune只是 的别名int32,您可以简单地执行以下操作:var r rune = 0xd8f3代替var r rune = '\ud8f3'如果你想得到一个大于 10FFFF 的数字,你可以这样做var r rune = 0x11ffff代替var r rune = '\U0011ffff'
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go