我有一个文本文件,其中包含Unicode字符的某种回退转换(尖括号中的Unicode代码点)。所以它包含例如foo<U+017E>bar
应该是“foošbar”。在R中是否有一种简单的方法可以将这些字符转换为整个文件转换为UTF8?不幸的是我在Windows上找不到支持的UTF-8语言环境。
答案 0 :(得分:2)
也许:
library(stringi)
library(magrittr)
"foo<U+0161>bar and cra<U+017E>y" %>%
stri_replace_all_regex("<U\\+([[:alnum:]]+)>", "\\\\u$1") %>%
stri_unescape_unicode() %>%
stri_enc_toutf8()
## [1] "foošbar and cražy"
可能有效(我不需要在macOS上进行最后一次转换,但您可能在Windows上)。
答案 1 :(得分:0)
当代码点正好显示四位数时,上一个答案应该有效。这是一个修改后的版本,适用于1到8之间的任意数字。
library(stringi)
library(magrittr)
"foo<U+0161>bar and cra<U+017E>y, Phoenician letter alf <U+10900>" %>%
stri_replace_all_regex("<U\\+([[:alnum:]]{4})>", "\\\\u$1") %>%
stri_replace_all_regex("<U\\+([[:alnum:]]{5})>", "\\\\U000$1") %>%
stri_replace_all_regex("<U\\+([[:alnum:]]{6})>", "\\\\U00$1") %>%
stri_replace_all_regex("<U\\+([[:alnum:]]{7})>", "\\\\U0$1") %>%
stri_replace_all_regex("<U\\+([[:alnum:]]{8})>", "\\\\U$1") %>%
stri_replace_all_regex("<U\\+([[:alnum:]]{1})>", "\\\\u000$1") %>%
stri_replace_all_regex("<U\\+([[:alnum:]]{2})>", "\\\\u00$1") %>%
stri_replace_all_regex("<U\\+([[:alnum:]]{3})>", "\\\\u0$1") %>%
stri_unescape_unicode() %>%
stri_enc_toutf8()
## [1] "foošbar and cražy, Phoenician letter alf "