matlab处理中文路径

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值