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

时间:2014-10-07 03:17:15

标签: windows svn unicode

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

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

svn add .\简体中文文件.txt

我收到错误:

svn: warning: W155010: 'D:\path\to\work-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

如果我使用chcp 65001(UTF-8),我会收到更糟糕的错误:

svn: warning: W155010: 'D:\path\to\work-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的脚本来运行几个自动化作业。有没有解决方案?

1 个答案:

答案 0 :(得分:1)

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

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

将来看起来像http://subversion.tigris.org/issues/show_bug.cgi?id=1537应该通过使用直接的Win32 API代替C stdlib来修复问题来进行控制台写入,但我无法看到相关代码更改的位置是确认控制台是否输入和文件访问也是类似的。