1、字符编码的方式
正式动手之前,首先需要了解一下字符编码的方式,详见:https://www.jianshu.com/p/1f36bc2a247f
2、单个转换文件[从字符编码UTF-8为ANSI]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%实现功能%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 说明:文件“1.cpp”字符编码方式为utf-8
% 功能:将文件“1.cpp”中的内容拷贝至文件'2.cpp',
% 并将文件'2.cpp'以ANSI编码格式保存。
% 注意:该脚本文件和所处理的文件务必在相同路径
clear
clc
fin=fopen('1.cpp','r','n','utf-8');%以utf-8方式打开该文件
if fin>0
fout=fopen('2.cpp','w');%默认写入的方式就是ANSI编码格式
end
while ~feof(fin)
% 函数feof(fid)用法:文件指针 fid 到达文件末尾时返回“真”值;否则返回“假”;
% while ~feof: 表示若未读到文件末尾,则继续循环
% 函数fgetl功能:从文件中读取一行数据,并去掉行末的换行符。
% 语法格式:tline = fgetl(fid)
% fid是通过fopen函数打开文件后得到的一个整型的文件标识。
% fgetl从这个文件中读取一行数据并丢弃其中的换行符。如果读取成功,tline容纳了读取到的文本字符串,如果遇到文件末尾的结束标志(EOF),则函数返回-1,即tline值为-1。
% 返回的字符串tline并不包含文本行的行终止符。要得到行终止符,可以使用函数fgets
tline = fgetl(fin)
for i=1:length(tline)
if (~strncmp(tline(i),' '' ',1))%比较字符串
fprintf(fout,'%s',tline(i));
end
end
fprintf(fout,'\r\n');
end
fclose(fin);
fclose(fout);
3、批量转换文件[从字符编码UTF-8为ANSI]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%实现功能%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 说明:文件夹中所有.cpp文件和.h文件的字符编码方式为utf-8,
% 该文件夹中可能还存在其他格式文件[即后缀名不是.cpp、.h,这些文件不做任何处理]。
% 功能:和单个文件处理的功能相同,这里是针对一个文件夹下所有文件进行处理
% 将转换好的文件统一存储在文件夹“修改后的(ANSI编码)”
% 注意:该脚本文件和所处理的文件务必在相同路径
clc
clear
path = 'C:\Users\Administrator\Desktop\SourceInsight\WaveCollect';%目录的路径
listing = dir(path);%获取目录中所有文件的名称,以结构体的形式存储
length(listing);%当前目录下一共有多少个文件
cout = 1;
path2 = '修改后的(ANSI编码)'
mkdir (path2)
%% 遍历所有目录中所有的文件,过滤'.cpp'文件和'.h'文件
for i = 1:1:length(listing)
%过滤'.cpp'文件和'.h'文件
if listing(i).name(length(listing(i).name)) == 'p' || listing(i).name(length(listing(i).name)) == 'h'
fileName = listing(i).name
%%%文件编码格式转换%%%
temp = num2str(cout);
cout = cout + 1;
fileName2 = strcat(temp, fileName);
path_fileName2 = fullfile(path2, fileName2);%将文件夹和文件名称拼接在一起
fin=fopen(fileName,'r','n','utf-8');%以utf-8方式打开该文件
if fin>0
fout=fopen(path_fileName2,'w');%默认写入的方式就是ANSI编码格式
end
while ~feof(fin)
% 函数feof(fid)用法:文件指针 fid 到达文件末尾时返回“真”值;否则返回“假”;
% while ~feof 表示 若 未读到文件末尾 则 继续 循环
% 函数fgetl功能:从文件中读取一行数据,并去掉行末的换行符。
% 语法格式:tline = fgetl(fid)
% fid是通过fopen函数打开文件后得到的一个整型的文件标识。fgetl从这个文件中读取一行数据并丢弃其中的换行符。如果读取成功,tline容纳了读取到的文本字符串,如果遇到文件末尾的结束标志(EOF),则函数返回-1,即tline值为-1。
% 返回的字符串tline并不包含文本行的行终止符。要得到行终止符,可以使用函数fgets
tline = fgetl(fin);
for i=1:length(tline)
if (~strncmp(tline(i),' '' ',1))
fprintf(fout,'%s',tline(i));
end
end
fprintf(fout,'\r\n');
end
fclose(fin);
fclose(fout);
end
end