如何在Windows中使用subversion操作unicode命名的文件



假设我使用带有代码页950(Big5,繁体中文)的Windows 7,我想用svn操作一些混合了unicode名称的文件,如简体中文文件.txt(GB2312,简体中文)。

如果我使用chcp 950,当我运行时:

svn add .简体中文文件.txt

我得到一个错误:

svn: warning: W155010: 'D:pathtowork-dir?体中文文件.txt'
not found
svn: E200009: Could not add all targets because some targets don't exist
svn: E200009: Illegal target for the requested operation

如果我使用chcp65001(UTF-8),我会得到一个更糟糕的错误:

svn: warning: W155010: 'D:pathtowork-dir?体svn: E200009: C
ould not add all targets because some targets don't exist
svn: E200009: Illegal target for the requested operation

我想试试chcp 1200(UCS-LE),但上面写着:

Invalid code page

看来TortoiseSVN可以正确地操作这些文件。然而,我需要编写调用svn的脚本来运行几个自动化作业。有什么解决方案吗?

像svn这样使用C标准库文件IO函数的MS实现的程序无法读取命令输入或包含当前代码页之外字符的文件名。您必须为每个文件分别chcp到合适的代码页(例如,936用于中文)。

理论上,代码页65001可以覆盖每个字符,但不幸的是,当使用该代码页时,MS C运行时会出现严重的错误,这些错误通常会破坏应用程序。微软一直未能解决这个长期存在的问题,这使得UTF-8在Windows下成为了二等公民。

未来看起来https://issues.apache.org/jira/browse/SVN-1537?issueNumber=1537应该通过使用直接的Win32 API而不是C stdlib来进行控制台写入来解决这个问题,尽管我看不出相关的代码更改在哪里,以确认控制台输入和文件访问是否得到了类似的解决。

第一个解决方案:看看如何将Windows切换到UTF-8:;Beta:使用Unicode UTF-8支持全球语言";真的是这样吗?它使svn-diff在我的机器上提供了正确的输出(chcp65001显然不够)。

第二个解决方案:在WSL中使用svn。

最新更新