为了账号安全,请及时绑定邮箱和手机立即绑定

无效的 Unicode 代码点 0xd83f

无效的 Unicode 代码点 0xd83f

Go
噜噜哒 2021-08-10 21:14:06
我正在尝试将一些 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'


查看完整回答
反对 回复 2021-08-10
  • 2 回答
  • 0 关注
  • 265 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信