gpt4 book ai didi

unicode - 无效的 Unicode 代码点 0xd83f

转载 作者:IT王子 更新时间:2023-10-29 00:54:25 26 4
gpt4 key购买 nike

我正在尝试将一些 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 文字不能表示代理代码点(“以及其他”(哪个?)):

Rune Literals

[...]

The escapes \u and \U represent Unicode code points so within them some values are illegal, in particular those above 0x10FFFF and surrogate halves.

在下面的示例中,您可以看到另一种被视为非法的情况:

'\U00110000' // illegal: invalid Unicode code point

这似乎暗示无效代码点(例如 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com