我正在尝试将一些 Java 移植到 Go。Java 代码有一个值为 的字符变量'\ud83f'。当我尝试在 Go 中使用这个值时,它不会编译:package mainfunc 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 中不起作用。
2 回答
动漫人物
TA贡献1815条经验 获得超10个赞
您尝试使用的符文文字无效,因为它表示代理代码点。规范说符文文字不能表示代理代码点(“以及其他”(哪个?)):
[...]
转义符 \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'
- 2 回答
- 0 关注
- 265 浏览
添加回答
举报
0/150
提交
取消