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