一尘不染

SVN错误:无法将字符串从本地编码转换为“ UTF-8”

linux

我有一个提交后钩子脚本,当对存储库进行提交时,该脚本执行工作副本的SVN更新。

当用户使用TortoiseSVN从Windows计算机提交到存储库时,他们会收到以下错误消息:

post-commit hook failed (exit code 1) with output:
svn: Error converting entry in directory '/home/websites/devel/website/guides/Images' to UTF-8
svn: Can't convert string from native encoding to 'UTF-8':
svn: Teneriffa-S?\195?\188d.jpg

上面有问题的文件是:Teneriffa-Süd.jpg注意带重音符号的u。这是因为该站点是德语,并且文件是用德语拼写的。

在Linux命令行上对工作副本执行更新时,不会遇到错误。仅当Windows SVN客户端通过提交执行提交后挂接时,才会出现上述错误。

问题:

  1. SVN为什么会尝试更改文件的编码?
  2. 是否允许文件名包含Windows标准ASCII字符之外的字符?

更新:

事实证明,有问题的文件名正确显示为Teneriffa- Süd.jpg从Windows计算机(通过Samba)查看时,但是当我从文件所在的Linux服务器(使用SSH和PuTTY)查看文件名时,Teneriffa- Süd.jpg


阅读 1029

收藏
2020-06-03

共1个答案

一尘不染

  1. 它不会更改文件的编码。它更改了文件名的编码(更改为每个客户端都希望能够理解的名称)。
  2. 允许谁?NTFS使用16位代码点,Windows可以根据您的要求公开各种编码的文件名(它将尝试将其转换为您要求的编码)。现在…(您的要求)取决于您使用的特定svn客户端。对我来说,这听起来像是TortoiseSVN中的错误。

编辑添加:

啊。我误解了症状。svn服务器将所有内容存储在utf-8中(似乎成功完成了此操作)。

提交后挂钩是无法从UTF-8转换的位。如果我正确理解您的意思,则服务器上的提交后挂钩会触发对共享驱动器的svn更新(因此svn服务器会向自身启动svn客户端…)?这意味着需要固定的配置是
服务器上 客户端 的配置在执行svn服务器的环境中检查LANG / LC_ALL。
。碰巧的是,挂钩在真空环境中运行(请参阅技巧)。因此,您应该在挂钩本身中设置变量。

另请参阅此页面以获取有关svn如何处理本地化的信息

2020-06-03