我有一些利用十进制 NCR 对特殊字符进行编码的 html 文件(我将它们作为纯文本处理)。有没有办法使用 R 方便地将它们转换为 Unicode?
NCR 代码并不总是与 unicode 一对一匹配,而且它变得相当混乱,因为ѣ
不等于\u1123
,而是等于\u0463:
> stri_unescape_unicode("\u1123")
[1] "ᄣ"
和
> stri_unescape_unicode("\u0463")
[1] "ѣ"
1123
是 hexadecimal 的十进制等价物0463
,Unicode 使用十六进制。因此,为了进行转换,您需要去除非数字字符,将数字转换为十六进制字符,在它们前面粘贴一个“\u”,然后使用stri_unescape_unicode
.
这个函数将完成所有这些:
ncr2uni <- function(x)
{
# Strip out non-digits and and convert remaining numbers to hex
x <- as.hexmode(as.numeric(gsub("\\D", "", x)))
# Left pad with zeros to length 4 so escape sequence is recognised as Unicode
x <- stringi::stri_pad_left(x, 4, "0")
# convert to Unicode
stringi::stri_unescape_unicode(paste0("\\u", x))
}
现在你可以做
ncr2uni(c("ѣ", "Ѥ", "ѥ"))
# [1] "ѣ" "Ѥ" "ѥ"