假设我使用代码页为 950(Big5,繁体中文)的 Windows 7,我想操作一些混合了 unicode 名称的文件,例如 简体中文文件.txt
(GB2312,简体中文) svn.
如果我使用 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 的脚本来运行多个自动化作业。有什么解决办法吗?
最佳答案
像 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 来执行控制台写入来解决问题,尽管我看不到相关代码更改的位置以确认控制台输入和文件访问是否得到类似解决。
关于windows - 如何在 Windows 中使用 subversion 操作以 unicode 命名的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26228046/