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

Cam*_*oft 40 linux svn version-control

我有一个post-commit钩子脚本,当对存储库进行提交时,它执行工作副本的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
Run Code Online (Sandbox Code Playgroud)

上面讨论的文件是: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

小智 62

又一个例子:

$ svn update
svn: Error converting entry in directory '.' to UTF-8
svn: Can't convert string from native encoding to 'UTF-8':

$ export LC_CTYPE=en_US.UTF-8

$ svn update
Run Code Online (Sandbox Code Playgroud)

(...现在一切都很好)

  • 我还必须取消设置`LC_ALL`,或将其设置为`en_US.UTF-8`. (3认同)
  • 我将导出语句添加到我的预提交文件的顶部,它可以工作.````export LC_CTYPE = en_US.UTF-8```` (2认同)

Bah*_*bar 12

  1. 它不会更改文件的编码.它改变了文件名的编码(每个客户端都希望能够理解的东西).
  2. 允许谁?NTFS使用16位代码点,Windows可以根据您的要求以各种编码方式公开文件名(它会尝试将它们转换为您要求的编码).现在......那一点(你怎么问)取决于你使用的特定svn客户端.听起来像TortoiseSVN中的一个错误.

编辑添加:

啊.我误解了这些症状.svn服务器将所有内容存储在utf-8中(似乎它成功地完成了).

提交后挂钩是无法从UTF-8转换的位.如果我理解你说的正确,服务器上的post-commit钩子会触发对共享驱动器的svn更新(因此svn服务器启动一个svn客户端到它自己......)?这意味着需要修复的配置是服务器上客户端的配置. 检查执行svn服务器的环境中的LANG/LC_ALL..碰巧,钩子在真空环境中运行(见提示).所以你应该在钩子本身设置变量.

有关svn如何处理本地化的信息,另请参见此页面


Nit*_*ava 7

如果错误是 -

[abc@288832-web3 public_html]$ svn update
svn: Error converting entry in directory 'images' to UTF-8
svn: Valid UTF-8 data
(hex: 46 65 6e 65 72 62 61 68)
followed by invalid UTF-8 sequence
(hex: e7 65 2b 46)
Run Code Online (Sandbox Code Playgroud)

然后这样做.

[abc@288832-web3 public_html]$ printf "\x46\x65\x6e\x65\x72\x62\x61\x68\n"
Fenerbah  
Run Code Online (Sandbox Code Playgroud)

(这意味着系统在该文件夹中有一些以"Fenerbah"开头的文件名.)

[abc@288832-web3 public_html]$ cd  images
[abc@288832-web3 images]$ rm -rf Fenerbahçe+Forma+2.jpg
Run Code Online (Sandbox Code Playgroud)

因此,您可以看到名称中有一个特殊字符,SVN不支持它.