我正在尝试将一些 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/

10-13 05:39