命令行重定向会导致输出丢失重音符号

3
我希望能够从我的svn项目中获取所有日志并将其输出到文件中。问题在于有时备注是用法语编写的,带有重音符号“é”、“à”等等。
当我使用以下命令时:
svn log svn://mysvnserver/mysite/trunk

在dos窗口中输出是正常的,重音符号也存在。
但是当我像这样将输出重定向到文件时:
svn log svn://mysvnserver/mysite/trunk > C:\releaseNotes.txt

为什么所有的重音都丢失了?

我甚至强制将文件设置为utf-8,但只要我运行命令行,文件就被强制转换回ANSI,使得重音无法阅读。

我该怎么办?


你如何强制文件为UTF-8格式?对于新创建的文件,我从未听说过可以这样做。 - Joey
没有,我强制在Notepad++中手动将其设置为UTF-8编码。 - Guillaume Bois
那是不行的。像这样重定向到文件时,cmd会重新创建文件。编码不是文件系统级别的属性,而且cmd也不支持UTF-8。 - Joey
2个回答

2

首先,Subversion命令行客户端在Windows上显示和处理非ASCII字符存在许多问题。作者认为这不是大问题,因为显然需要处理超过ASCII的人很蠢,特别是在Windows上。有时它会表现出奇怪的方式:

S:\Joey\Wikipedia Work\Flags>svn log "Flag of Čáslav.svg"
svn: 'Flag of Cáslav.svg' is not under version control

即使文件在存储库中,使用TortoiseSVN时也可能出现非ASCII字符显示问题。很久以前,开发人员放弃了真正支持非ASCII字符的想法,而选择通过剥离重音等方法将所有内容转换为ASCII / Latin 1来忽略/修复此问题(请注意上面示例中Č与C的区别)。我可以尝试再找一下被关闭的错误报告,但这已经有一段时间了。
编辑:使用“cmd /u”也无效;重定向的文件仍然只有CP1252编码。
我仍在努力说服TortoiseSVN编写这样的文件,但迄今为止并没有太大的成功,即使我成功打开了日志窗口。
不过,你可以使用“--xml”选项,然后解析XML以获取所需数据。XML文件使用UTF-8编码,不会破坏字符。虽然更加复杂,但如果你可以使用PowerShell,就可以基于XML相对简单地复制正常输出。

0

你知道 chcp DOS 命令吗?

在批处理文件中,在 svn log 之前使用它(带有正确的字符集)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接