我有几百个文件名'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()
函数返回一个文件名列表,然后可以由系统正确解释。
答案 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中的文件。