您的位置:首页 > 其它

解决svn post-commit 中文乱码问题

2008-01-17 12:52 417 查看
svn hooks 目录下缺省的 post-commit 脚本模板通过调用 commit-email.pl 来分析当次提交的内容并根据参数设置把修改信息 email 给项目相关人员。脚本支持使用 -m 参数进行正则过滤,当修改不同目录的内容时可以分别 email 给不同的邮件地址。

不过当项目中存在中文文件名的时候,由于 svn 会把非ascii码字符转义成形如 ?/325 的格式,所以在发出来的 email 里面这些中文都变成了不可读的数字。

要把这些编码转回原来的字符,只需要在 commit-email.pl 脚本处理 email body 信息的地方加上一段转码处理即可。比如在 my @difflines; (行487) 的前面加上:

for (my $i=0; $i<@body; ++$i){
my @rsa = split( //?///, $body[$i] );
$body[$i] = "";
foreach my $val (@rsa) {
$val =~ /(^[0-9]{3})(.*)/;
if(defined $1 and $1 gt 0){
#print "/n[".$1 . "," . $2."]";
$body[$i] .= chr($1) . $2;
}
else{
$body[$i] .= $val;
}
}
}

把之前 push 到 @body 变量的所有内容重新进行处理,发现 ?/ 后面跟三个数字就替换为相应的字符。

另外在 post-commit 模板脚本中没有写 commit-email.pl 的绝对路径,需要写上才能正常被调用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: