我正在尝试将一些 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 中不起作用。
最佳答案
您尝试使用的 rune 文字无效,因为它表示代理代码点。规范说 rune 文字不能表示代理代码点(“以及其他”(哪个?)):
在下面的示例中,您可以看到另一种被视为非法的情况:
这似乎意味着无效的代码点(例如 10ffff 以上的那些)在 rune 文字中也是非法的。
请注意,由于 rune
只是 int32
的别名,您可以简单地执行以下操作:
var r rune = 0xd8f3
代替
var r rune = '\ud8f3'
如果你想得到一个大于 10FFFF 的数字,你可以这样做
var r rune = 0x11ffff
代替
var r rune = '\U0011ffff'
关于unicode - 无效的 Unicode 代码点 0xd83f,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25557314/