写入RTF文件时的奇怪行为

问题描述

在Matlab中,我有一个处理RTF文件的奇怪行为。

使用以下指令读取rtf文件

cin = textread(filename,'%s','delimiter','\n');

(cin)是一个Nx1单元,其中N是文件的行数, 所以我可以编辑一些特定的行。

我使用以下功能编写文件RTF:

function dum=   cell2rtf(cin,filename)
    
    [row,col]=     size(cin);                  
    fout=           fopen(filename,'w');       
    for ii=1:row
        if(ii<row)
            fprintf(fout,'%s\r\n',cin{ii});
        else
            fprintf(fout,cin{ii});
        end
    end
    fclose(fout); 

奇怪的行为是这样的: 如果cin{x}行是包含内容的字符串

'19°\cell 19°\cell \cell \cell \cell 70°'

函数写入文件时,同一行如下所示

'19°\cell 19°\cell \cell \cell \cell 70°'

我不明白为什么字符'°'每次都会变成'°' 而且我想知道如何解决这个问题。

解决方法

问题是EXPLAIN SELECT * FROM LatestDate;适用于纯文本文件,而RTF文件不是纯文本文件:它们是包含标记和格式代码的二进制形式的文件,有点像Word textread()文件。 .doc可能会遇到这些格式/结构代码,并将它们误解为纯文本字符,而这就是诸如textread()之类的垃圾字符的来源。

您能将RTF文件另存为纯文本文件并从中读取吗?

否则,您将需要编写RTF解析器或找到一个RTF解析库并使用它。 Matlab可以很轻松地与Java库配合使用,因此您可以使用Apache Tika库的RTFParserRTFParserKit