https://www.douban.com/note/387532266/
matlab读取文本文件很方便,textread,textscan等就能搞定。如果整个文件仅包含数字,则有更方便的命令"load".
但是一旦文件包含中文,则往往读出来的是乱码。
经过搜索测试,发现救命稻草:指定编码格式的fopen命令。原文:http://www.ilovematlab.cn/thread-160275-1-1.html
fileID = fopen(filename, permission, machineformat, encoding)
machineformat默认为'n',='native'
encoding就是编码。要想正确读取,需要保证文件保存时的编码格式与读取所用的编码格式相同。汉字常用的是UTF-8,其他还有Big5,GBK等。
如果不确定保存时所用的编码,则可采用'r+'作为permission参数,据说会采用默认的文本编码格式。
fid=fopen('filename','r+','n','utf-8');
tline=fgetl(fid);
while tline
tline=fgetl(fid);
fclose(fid)
即能逐行读入整个文本文件。
不过,上述方法有可能出现无限循环,原因可能是没有正确识别文件终止符;并且字符串前可能多出"?". 经测试,native2unicode命令可解决此问题。以下代码能够正确输出整个文件并终止:
fid=fopen('filename','r+','n','utf-8');
tline=fgetl(fid);
tline=native2unicode(tline);
while tline
tline=fgetl(fid);
tline = native2unicode(tline);
disp(tline);
end
fclose(fid);
更多测试或细节待补充。
补充1:将permission设置为'r+'并不能识别未知编码的文本文件。对于未知编码的文件,一个简单的方法是利用记事本打开,然后另存为。。。,选择utf-8编码,即可保证保存与读取的编码统一。
补充2:看到一段:(中文)Windows系统默认字符编码是GBK(称为系统内码),所有的文字都使用GBK显示!保存的时候将按选择的字符编码进行编码转换(系统内嘛-->指定编码)。复制的时候所有的文字编码也都是系统内码。
补充3:fopen所支持的编码列表:http://www.mathworks.se/help/matlab/ref/fopen.html#inputarg_encodingIn