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

本文介绍如何解决SVN中中文文件名显示为不可读数字的问题,通过修改commit-email.pl脚本来正确显示中文文件名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 的绝对路径,需要写上才能正常被调用。

 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值