找回密码
 新建账号

filezilla server 550 Invalid file name or path 无法显示文件名包含中文等非 ASCII 字符的文件

[复制链接]
大郎 发表于 2025-1-24 18:10 | 显示全部楼层 |阅读模式
一个非常诡异的问题,在 Ubuntu Linux 上运行的 filezilla server FTP 服务器,客户端连接到 FTP 服务器后,不能显示目录中文件名包含中文等 non-ASCII 字符的文件,上传文件或修改文件名的时候,如果文件名包含中文等非 ASCII 字符时,也会操作失败,错误信息是 550 Invalid file name or path,即文件名或路径名无效,实际上是文件名或路径名包含无法识别的字符。
filezilla server 550 Invalid file name or path 错误信息示例如下
  1. Command:        STOR 吴先成.txt
  2. Response:        550 Invalid file name or path
  3. Error:        Critical file transfer error
复制代码
  1. Command:        RNTO 吴先成.txt
  2. Response:        550 Invalid file name or path
复制代码
将 filezilla server 整个软件目录打包放到另外一台版本相同的 Ubuntu Linux 上运行,却没有出现相同的问题。
最后发现,竟然是操作系统语言设置导致了 filezilla server 不能正常显示、保存、修改文件名包含非 ASCII 字符的文件。
在故障设备上运行以下命令查看语言设置,返回结果如下。
  1. locale
  2. LANG=C.UTF-8
  3. LANGUAGE=
  4. LC_CTYPE="C.UTF-8"
  5. LC_NUMERIC="C.UTF-8"
  6. LC_TIME=C.UTF-8
  7. LC_COLLATE="C.UTF-8"
  8. LC_MONETARY="C.UTF-8"
  9. LC_MESSAGES="C.UTF-8"
  10. LC_PAPER="C.UTF-8"
  11. LC_NAME="C.UTF-8"
  12. LC_ADDRESS="C.UTF-8"
  13. LC_TELEPHONE="C.UTF-8"
  14. LC_MEASUREMENT="C.UTF-8"
  15. LC_IDENTIFICATION="C.UTF-8"
  16. LC_ALL=
复制代码
而在无故障设备上返回的结果是
  1. locale
  2. LANG=en_US.UTF-8
  3. LANGUAGE=
  4. LC_CTYPE="en_US.UTF-8"
  5. LC_NUMERIC="en_US.UTF-8"
  6. LC_TIME="en_US.UTF-8"
  7. LC_COLLATE="en_US.UTF-8"
  8. LC_MONETARY="en_US.UTF-8"
  9. LC_MESSAGES="en_US.UTF-8"
  10. LC_PAPER="en_US.UTF-8"
  11. LC_NAME="en_US.UTF-8"
  12. LC_ADDRESS="en_US.UTF-8"
  13. LC_TELEPHONE="en_US.UTF-8"
  14. LC_MEASUREMENT="en_US.UTF-8"
  15. LC_IDENTIFICATION="en_US.UTF-8"
  16. LC_ALL=
复制代码
打开故障设备上的文件 /etc/default/locale,发现文件内容如下。
  1. LANG=en_US.UTF-8
  2. LC_TIME=en_DK.UTF-8
复制代码
很明显,LC_TIME=en_DK.UTF-8 导致了问题,操作系统找不到 en_DK,也就是丹麦英语,en_DK.UTF-8 最终回落到了 C.UTF-8。
将 en_DK.UTF-8 修改成 en_US.UTF-8 可以解决这个问题。
方法一,打开 /etc/default/locale,直接修改文件后保存。
方法二,以管理员 root 身份运行以下命令。
  1. update-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8
复制代码
相关链接 filezilla server locale

手机版|轻松e站

GMT+8, 2025-3-14 13:18

快速回复 返回顶部 返回列表