处理文件名中的“将变音标记组合”与R

时间:2017-09-27 13:49:05

标签: r unicode

我有几百个文件名'Combining Diacritical Marks'Unicode General Category Mn)。当我使用list.files()函数时,我不能让R读取或打开这些文件,因为R将带有“组合变音符号”的文件名(如\u301\u308)转换为{分别为{1}}和\xb4。结果是系统找不到的不同文件名。你如何防止R替换这些字符?

在文件名列表上应用\xa8函数,将单独的急性重音替换为组合的急性重音(即gsub()将“A”更改为单个unicode字符“Á”,不是双重unicode字符“Á”不是同一个东西,因此系统找不到具有该名称的文件。(粘贴到文本编辑器中以查看它们不相同。)

即使将双unicode字符“Á”传递到filenames <- gsub("A´", "Á", filenames)并从控制台运行,也会返回单个unicode字符“Á”。但是,print("Á")返回正确的双unicode字符“Á”。而print("A\u301")返回gsub("A´", "A\u301", "A´")

似乎stringi::stri_trans_nf*()函数是一种可能的解决方案,但我不确定如何使用"A´"list.files()函数返回一个文件名列表,然后可以由系统正确解释。

1 个答案:

答案 0 :(得分:0)

自己解决了。

使用以下内容将文件名的字符向量更改为正确的系统表示,其中包含“结合急性重音”\u301和“组合分音符”\u308

oldnames <- list.files(pattern = "*.pdf", full.names = TRUE, recursive = TRUE)
library(stringi)
oldnames <- unlist(lapply(oldnames, stri_replace_all_regex, "´", "\u301"))
oldnames <- unlist(lapply(oldnames, stri_replace_all_regex, "¨", "\u308"))

然后创建一个没有组合变音符号的文件名的新字符向量。

newnames <- oldnames
newnames <- unlist(lapply(newnames, stri_replace_all_regex, "\u301", ""))
newnames <- unlist(lapply(newnames, stri_replace_all_regex, "\u308", ""))

然后使用新文件名重命名文件。

file.rename(oldnames,newnames)

至少现在我可以照常处理R中的文件。