用MATLAB打开含有英文、数字和汉字的txt文件

        之前也没接触过用MATLAB打开含有英文、数字和汉字的txt文件,结果网上查了一下,打开的文件内容中文全部显示乱码,折腾了大半天终于解决了。

一、常用打开方法:

1、Data = load("filename.txt");

    只支持仅含有数字的文本文件,如果夹杂着字母或者汉字,则会报错。

2、Data = importdata("filename.txt");

     可以读取数字和字符:Data.data里存放纯数字,Data.textdata是以文本形式存放的所有数据。

3、textread

见高人博客http://blog.sina.com.cn/s/blog_9e67285801010bju.html

4、tline = fgetl(fid) 

从文件中读取一行数据,并去掉行末的换行符。 
fid是通过fopen函数打开文件后得到的一个整型的文件标识。fgetl从这个文件中读取一行数据并丢弃其中的换行符。如果读取成功,tline容纳了读取到的文本字符串,如果遇到文件末尾的结束标志(EOF),则函数返回-1,即tline值为-1。 
返回的字符串tline并不包含文本行的行终止符。要得到行终止符,可以使用函数fgets。 
最开始用的代码:

fid = fopen('test.txt');
while 1
    tline = fgetl(fid);
    if ~ischar(tline)   
        break
    end
    disp(tline)
end
fclose(fid);

但是这样中文会全部为乱码。网上有说用native2unicode函数转换一下。尝试无效

fid = fopen('test.txt');
while 1
    tline = fgetl(fid);
    if ~ischar(tline)   
        break
    end
    tline =  native2unicode(tline);
    disp(tline)
end
fclose(fid);

最终解决办法:这是因为fopen文件时,没有指定打开方式,则会以默认编码方式打开(ASCII码或二进制),但是很多txt文件不是这两种编码方式。在打开文件时指定为‘UTF-8’格式即可。

fid = fopen('test.txt','r','n','UTF-8');
while 1
    tline = fgetl(fid);
    if ~ischar(tline)   
        break
    end
    disp(tline)
end
fclose(fid);

另外附一个可能会有用的博客

‘解决MATLAB中文乱码’ https://blog.csdn.net/soliddream66/article/details/61414565

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原创matlab读取txt中文文本的解决方案-程序.rar matlab对中文的支持一直以来都是个不小的问题,尤其在读取文本方面。一般读出的中文文本都是乱码,网上找了半天没找到答案,自己研究了一下,在快要绝望的时候终于有了结果~ 呵呵     这个问题是在本论坛中的GUI教学视频第5课中提到的,学生的成绩单必须要转换成英文 数字才能正常读入,我用的是中文系统,用fopen试了一下,结果读出的中文是'???'样的乱码。不多废话,还是用本课视频的例子,为了证明读取中文的有效性,我把源程序的思路做了一下改动,界面中不做中文string的设置,全部由程序给出,解决方案如下 编程环境:matlab7.1;Windows XP professional SP2 更改后的代码 function matlab_GUI_4_OpeningFcn fdata = importdata    % 导入文本数据 ftextdatasize = size;   % 求文本类数据长度 fdatasize = size    % 求数据长度 counter = 1; while counter<ftextdatasize  % ftextdatasize 为 fdata.textdata 行数     % 从第二行开始取(从第二行起才为人名),第一行为标识     xingming = fdata.textdata;     counter = counter 1; end counter = 1; while counter<fdatasize 1     chengji = fdata.data;     counter = counter 1;    end set; handles.chengji = chengji; % 设成了全局变量,留着扩展用,其实只用局部变量也成 handles.kemu = fdata.textdata); set); set); set); set); 复制代码function listbox1_Callback value = get; % value为行向量,选择前2项即为[1 2]; set)); 复制代码结果如图 未命名.JPG 感谢管理员为我们做的如此精彩的视频,附件中为数据及代码(包括本例代码以及GUI视频教程第5课程序代码)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值