5

我正在尝试在 cmd.exe 上使用 subversion 提交修订。cmd.exe 的代码页是 utf-8(用 设置chcp 65001):

c:\path\to\work\dir> svn ci

由于我没有指定带有-m标志的消息,并且变量SVN_EDITOR设置为gvim,因此 gvim 打开并且我可以输入我的消息。我将文件保存为utf-8 ( :set filencoding=utf8) 并退出编辑器。

现在,svn 客户端(?)告诉我:(Auf ... .folgte ein nicht-ASCII Byte 195, das nicht von/nach UTF-8 konvertiert werden konnte我相信英语是:检测到非 ASCII 字符(代码 %d),并且无法与 UTF-8 相互转换)。

这很奇怪,因为我很确定我存储的消息文件是 UTF-8 格式。

我也尝试将其存储在latin-1中,但效果相同。

编辑

我对消息进行了测试ü。该文件的十六进制内容是

0000000: c3bc 0d0a 2d2d 2044 6965 7365 2075 6e64  ....-- Diese und
0000010: 2064 6965 2066 6f6c 6765 6e64 656e 205a   die folgenden Z
0000020: 6569 6c65 6e20 7765 7264 656e 2069 676e  eilen werden ign
0000030: 6f72 6965 7274 202d 2d0d 0a0d 0a41 2020  oriert --....A
0000040: 2020 780d 0a                               x..

注意第一个字符(ü后跟\x0d\x0a)。被ü编码为c3 bcutf-8 表示LATIN SMALL LETTER U WITH DIAERESIS(见utf 8 表),这是所需的ü

另请注意,错误消息(在这种新情况下Ein Nicht-ASCII Zeichen (Kode 195) wurde gefunden, das nicht von/nach UTF-8 konvertiert werden konnte:)抱怨 195(对于c3文件中的第一个字节来说是十进制的)。当然,错误信息是对的:它不是 ASCII 字符,但这不是使用 utf-8 文件的全部意义吗?

编辑 2

我尝试以 UTF-8 格式提交消息,因为这是我认为最自然的事情。显然,SVN,至少在 cmd.exe 上,并不这么认为。只要我可以提交一个ü和其他德语特殊字符,我就不会关心我需要以什么格式提交消息。

4

4 回答 4

5

看起来该svn commit命令实际上接受了一个参数来告诉 SVN 你的提交消息的编码是什么。试试svn commit --encoding UTF-8.

http://svnbook.red-bean.com/en/1.7/svn.ref.svn.html说:

--encoding ENC

告诉 Subversion 你的提交消息是使用提供的字符编码组成的。默认字符编码源自操作系统的本地语言环境;如果您的提交消息是使用任何其他编码组成的,请使用 此选项。

于 2013-11-10T04:15:39.063 回答
0

我不知道它是否会起作用,但您也可以尝试:set bomb在您的 gvim 中使用,以便在保存时在文件中包含 BOM。一些程序使用 BOM 来检测它们应该使用 Unicode。我不确定 SVN 是否属于该类别。

于 2013-11-07T16:05:55.783 回答
0

您可以尝试适用于 Windows 的 iconv

转换前的文件:

ü
-- Diese und die folgenden Zeilen werden ignoriert --

十六进制转储:

00000000 c3 bc 0d 0a 2d 2d 20 44 69 65 73 65 20 75 6e 64 |ü..-- Diese und|
00000010 20 64 69 65 20 66 6f 6c 67 65 6e 64 65 6e 20 5a | 死亡Z|
00000020 65 69 6c 65 6e 20 77 65 72 64 65 6e 20 69 67 6e |艾伦·沃登点火|
00000030 6f 72 69 65 72 74 20 2d 2d 0d 0a |东方 --..|

转换命令:

<utf8.txt iconv -f utf-8 -t 850>ascii.txt

结果:

ü
-- Diese und die folgenden Zeilen werden ignoriert --

十六进制转储:

00000000 81 0d 0a 2d 2d 20 44 69 65 73 65 20 75 6e 64 20 |...-- Diese 和 |
00000010 64 69 65 20 66 6f 6c 67 65 6e 64 65 6e 20 5a 65 |模具
00000020 69 6c 65 6e 20 77 65 72 64 65 6e 20 69 67 6e 6f |ilen werden 忽略|
00000030 72 69 65 72 74 20 2d 2d 0d 0a |riert --..|

代码页始终为 850。

于 2013-11-07T17:50:19.783 回答
0

添加到.bashrc(或类似的)

export LANG="de_DE.utf8"
export LANGUAGE="de_DE.utf8"
export LC_ALL="de_DE.utf8"

svn 使用环境中定义的编码

于 2015-11-29T23:12:22.197 回答