perl脚本批量处理代码中的中文注释乱码的问题

代码中统一使用utf-8编码是最好的,但是有一些多人合作的项目或者一些历史遗留代码,常见一些中文注释乱码的问题。这里以一个开源项目evpp为例子 evpp。以项目中的一个commit id为例: 477033f938fd47dfecde43c82257cd286d9fa38e , git checkout -b test 477033f938fd47dfecde43c82257cd286d9fa38e , 切换一个分支用于测试。这个项目中的 evpp/logging.h 文件的注释就存在乱码。本人用vscode打开的截图如下:

当然这种情况在网页上或者notepad++上有的可以看清楚乱码的注释。但是这没有解决根本问题,编码混乱还是存在。如果代码中这种情况比较少,手动修改一下也是可以的,文件比较多就比较痛苦了。如下的perl脚本用于解决这个问题。

perl 复制代码
#! /usr/bin/perl
use v5.14;
use Tie::File;
use Encode;

for my $filePath (@ARGV) {
	unless (-f $filePath) {
		warn "$filePath does not exist !!!";
		next;
	}
	tie my @contentArry, 'Tie::File', $filePath;
	for my $line (@contentArry) {
		next if encode('utf-8', decode('utf-8', $line)) eq $line;
		$line = encode('utf-8', decode('gbk', $line));
	}
	untie @contentArry;
}

脚本的用法举例,脚本命名为 process_comments.pl ,然后在Git Bash中直接执行 ./process_comments.pl logging.h 即可,参数可以输入多个文件名。执行脚本后 git diff一下:

可以清楚的看到,乱码的注释正常显示了。在vscode中也显示正常。OK,又可以愉快地码代码了!!!

相关推荐
leisoo809711 分钟前
100GBA股股票数据怎么存ClickHouseRedisMySQLJSON完整对比
大数据·linux·服务器·开发语言·python
不会代码的小猴1 小时前
21. 泛型编程上
开发语言·c++·笔记·算法
青瓦梦滋1 小时前
传输层UDP/TCP协议
linux·网络·c++·网络协议·tcp/ip·udp
一只旭宝2 小时前
细讲C加加【9】C++ std::function与std::bind详解|仿函数、绑定器、类成员绑定、占位符、成员偏移指针
开发语言·c++·算法
coder!mq4 小时前
说几个常见的语法糖?
java·开发语言·算法
gugucoding4 小时前
38. 【Java】Stream API(下):高级操作与性能
java·开发语言
Lhan.zzZ4 小时前
在 Visual Studio 2022 中打造可扩展的动态链接库模块:从零搭建到原理解析
开发语言·c++·visual studio
心平气和量大福大4 小时前
android-实例-蒲公英-更新与安装-5-签名与生成APK
android·java·开发语言
码哥DFS4 小时前
构造函数、实例对象、对象原型 ----三者关系
开发语言·javascript·原型模式
quantdash_cc5 小时前
告别自建 Requests/BS4 网页爬虫:基于 QuantDash 搭建零维保的高性能量化行情流水线
开发语言·爬虫·python·pandas·量化·quantdash