R中stri_unescape_unicode无法解析高位私有Unicode码点的问询
目录
- 背景
- 问题
- 疑问
背景
在R语言环境中,stringi::stri_unescape_unicode()可用于将Unicode码点转换为对应字符。
例如,á(带重音的小写拉丁字母A)和好的Unicode码点分别为U+00E1和U+597D,执行以下代码即可插入这些字符:
library(stringi) stringi::stri_unescape_unicode("\\u00E1") stringi::stri_unescape_unicode("\\u597D")
输出结果:
[1] "á" [1] "好"
Unicode标准中指定了三类私有使用码点范围:U+E000..U+F8FF、U+F0000..U+FFFFD和U+100000..U+10FFFD,这些码点的用途由使用者自行定义。
各范围的边界字符如下:
- 第一范围: (U+E000)
- 第一范围: (U+F8FF)
- 第二范围: (U+F0000)
- 第二范围: (U+FFFFD)
- 第三范围: (U+100000)
- 第三范围: (U+10FFFD)
问题
打印第一范围的字符时,结果符合预期:
stringi::stri_unescape_unicode("\\ue000") stringi::stri_unescape_unicode("\\uf8ff")
输出结果:
[1] "" [1] ""
但打印第二范围的字符时,无法得到对应字符:
stringi::stri_unescape_unicode("\\uf0000") stringi::stri_unescape_unicode("\\uffffd")
输出结果:
[1] "0" [1] "\uffffd"
第三范围的字符同样无法正常转换显示:
stringi::stri_unescape_unicode("\\u100000") stringi::stri_unescape_unicode("\\u10fffd")
输出结果:
[1] "က00" [1] "ჿfd"
疑问
- 为何
stringi::stri_unescape_unicode()无法显示U+F0000..U+FFFFD或U+100000..U+10FFFD范围内的字符? - R语言中是否存在可返回这些字符的函数?
内容的提问来源于stack exchange,提问作者Rodrigo Morales
相关产品推荐
相关产品推荐

