You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下R的fs::dir_ls()无法正确处理文件名中的非ASCII字符

解决思路与操作步骤

1. 针对性调整R的字符编码区域

当前系统区域为Greek_Greece.1253(单字节编码,不支持ü这类西欧字符),无需修改全部区域设置,仅调整负责字符处理的LC_CTYPE:

  • 执行命令:
    Sys.setlocale("LC_CTYPE", "German_Germany.1252")
    
  • 验证设置:Sys.getlocale("LC_CTYPE")返回"German_Germany.1252"即生效
  • 重新测试fs::dir_ls(my_dir)和fs::file_exists()

2. 强制fs包使用Windows宽字符API

绕开系统编码限制,直接读取文件名的Unicode原始值:

  • 设置环境变量并重载fs包:
    Sys.setenv(FST_USE_WINDOWS_WIDE_CHAR=1)
    detach("package:fs", unload=TRUE)
    library(fs)
    
  • 若重启R会话后失效,可将环境变量设置写入.Renviron文件(usethis::edit_r_environ())实现永久生效

3. 调整Windows系统区域设置(永久方案)

若临时调整R编码有效,可修改系统层面的区域配置:

  • 打开控制面板 > 时钟和区域 > 区域 > 管理,点击「更改系统区域设置」
  • 选项1:勾选「Beta版:使用Unicode UTF-8提供全球语言支持」(注意:可能影响部分老软件兼容性)
  • 选项2:选择「德语(德国)」作为系统区域,原生支持西欧字符
  • 重启电脑后再测试R中的fs函数

4. 调整fs包版本

若问题是fs包更新引入的兼容性问题,可回退至之前正常工作的版本:

  • 找到CRAN上fs包的归档版本,下载适配R3.6.2的旧版本源码包
  • 执行本地安装命令:
    install.packages("本地文件路径/fs_x.x.x.tar.gz", repos=NULL, type="source")
    

内容的提问来源于stack exchange,提问作者GerasimosPanagiotakopoulos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 17:05:29