【问题标题】:Read a string from text file returning strange characters in MATLAB从文本文件中读取字符串,在 MATLAB 中返回奇怪的字符
【发布时间】:2014-08-02 21:50:05
【问题描述】:

我正在使用这些代码从文本文件中读取"1.0.2" 之类的字符串:

reader = fopen('Address\My_Text.txt');
Out= textscan(reader,'%str'); 
Out1=Out{1} ; 
Out2=Out1{1};
fclose(reader);

此代码 (Out2) 返回如下字符串:1.0.2。这是一个文本文件,由 MATLAB 从 HDD 中的其他位置复制并使用上述代码读取一次,用于与一些现有的文本文件进行比较,然后使用 movefile 替换此文件(主文件工作正常)。当我手动创建一个文本文件并在其中插入 "1.0.2" 时,这些代码会正确读取此值。问题是什么? MATLAB的解决方案是什么?

谢谢。

【问题讨论】:

  • @Jongware。谢谢你的评论。这些解决方案适用于 C# 和 VB.Net。我需要 MATLAB 的解决方案。
  • 啊,但是你问出了什么问题。这是 BOM,由您的文本创建者编写。所以有几种解决方案(包括“不要写”)。
  • 这是为 MATLAB 寻找解决方案的线索。谢谢你。我编辑了我的答案。什么是(包括“不要写”)?你能更详细地描述一下吗?
  • 我的意思是“不要把 BOM 写到你的文本中”,如果你有选择的话。您可能可以将前 3 个字节读入 MatLab,检查它们是否形成 BOM,如果是则忽略它们,或者倒回文件并读取“照常”如果不是。但请注意,BOM 是一个 strong 指示文本文件可能包含 UTF8 编码字符。那么,轻率地忽略它可能并不明智。可能,正如我的链接中所建议的那样,您可以告诉 MatLab 期待 UTF8 文本。

标签: matlab text fopen fclose textscan


【解决方案1】:

您可以使用fopen('My_Text.txt', 'r', 'n', 'UTF-8') 以UTF-8 编码打开此文件。新增的3个参数请查看documentation of fopen了解详情。

textscan 之前插入fseek(reader, 3, 'bof') 也可以以不同的方式解决此问题。  是 UTF-8 的 BOM

【讨论】:

  • 感谢您的准确回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-12
  • 1970-01-01
  • 2016-04-07
  • 2019-11-14
相关资源
最近更新 更多