Windows环境下R读取路径含UTF-8特殊字符的rds文件失败如何解决
解决方案
方案1:升级R到4.2及以上版本(最优先)
Windows平台从R 4.2版本开始默认使用UTF-8作为系统编码,无需额外配置即可正确识别含UTF-8特殊字符的文件路径,升级后直接调用原有的readRDS/read_rds函数即可正常读取文件。
方案2:使用fs包处理路径(无需升级R)
你环境中已加载的fs包专门针对跨平台路径处理设计,非ASCII编码兼容性远高于base R的字符串路径处理,按如下方式修改代码即可:
library(fs) # 用fs::path代替str_c拼接路径 file_path <- path( outputDIR_pro[i], str_c( sub(".+/data/Strava/.+/([0-9]+?).txt", "\\1", athlethes[[i]][[j]]) %>% str_match('\\d+') %>% str_detect(names_id_vec,.) %>% names_id_vec[.] %>% str_remove('\\d+;'), '_sprinter_point.rds' ) ) # 去除路径首尾多余空格后读取 file_path <- str_trim(file_path) readRDS(file_path)
方案3:修改编码配置
在脚本开头添加如下代码,强制R使用UTF-8处理字符:
# 配置字符类型编码为UTF-8,如执行报错可替换为Sys.setlocale("LC_CTYPE", ".65001") Sys.setlocale(category = "LC_CTYPE", locale = "UTF-8") # 设置全局默认编码为UTF-8 options(encoding = "UTF-8")
配置完成后再运行路径生成和读取代码即可。
方案4:使用Windows短路径绕过编码问题
如果上述方案都不生效,可将路径转换为Windows兼容的8.3短路径,绕过编码识别限制:
# 生成原始路径 raw_path <- str_c( outputDIR_pro[i], sub(".+/data/Strava/.+/([0-9]+?).txt", "\\1", athlethes[[i]][[j]]) %>% str_match('\\d+') %>% str_detect(names_id_vec,.) %>% names_id_vec[.] %>% str_remove('\\d+;'), '_sprinter_point.rds' ) # 去除空格后转短路径读取 raw_path <- str_trim(raw_path) readRDS(shortPathName(raw_path))
注意:你打印的路径首尾和中间文件夹名称后存在多余空格,必须先去除空格再执行读取,否则即使编码正常也会匹配不到文件。
内容的提问来源于stack exchange,提问作者mugdi
相关产品推荐
相关产品推荐

