这个错误是因为 SVN 客户端在尝试把 UTF-8 编码的文件名转换成当前系统“本地编码”时失败,根本原因就是系统的 locale 没有设置为 UTF-8。解决思路:把系统 locale 改成 UTF-8 即可。
Linux 通用做法(CentOS、Ubuntu、Debian 等均适用)
-
查看当前 locale
locale
如果看到LC_ALL=
或LANG=
后面不是*.UTF-8
,就需要改。 -
临时生效(仅当前会话,测试用)
export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8 export LANGUAGE=en_US.UTF-8
然后重新执行svn up
/svn co
测试。 -
永久生效(推荐)
把同样的三行追加到当前用户的环境文件:echo -e "\nexport LC_ALL=en_US.UTF-8\nexport LANG=en_US.UTF-8\nexport LANGUAGE=en_US.UTF-8" >> ~/.bashrc source ~/.bashrc
如果是所有用户,写到/etc/profile
或/etc/bash.bashrc
里即可 -
确认系统已安装 UTF-8 语言包
Debian/Ubuntu:sudo apt-get install language-pack-en
CentOS/RHEL:sudo localedef -v -c -i en_US -f UTF-8 en_US.UTF-8
若提示No such file or directory
,先安装语言包再执行。
Windows 客户端
-
TortoiseSVN:
右键 → TortoiseSVN → Settings → General → Language → 选 “English (United States)” 或 “中文(简体,中国)” 并确保系统区域设置已启用 UTF-8(Win10/11:设置 → 时间和语言 → 区域 → 相关设置 → 管理 → 更改系统区域设置 → 勾选 “Beta: 使用 Unicode UTF-8…”)。 -
命令行:
在 Git Bash / PowerShell 里先执行set LC_ALL=en_US.UTF-8 set LANG=en_US.UTF-8
然后再运行svn
。
完成上述步骤后,再次执行
svn up
/svn co
,E000022: Can't convert string from 'UTF-8' to native encoding
就不会再出现。