如何在Delphi中读取包含“NULL CHARACTER”的文本文件?

时间:2013-07-10 20:53:26

标签: delphi

我有一个包含许多NULL CHARACTERS的文本文件,其编码为UTF8。

我在第一个Null字符后使用RichEdit1.Lines.LoadFromFile(FileName,Encoding)加载了文件,但它没有加载文件的其余部分。

有任何帮助吗?如何从文本文件中删除NULL Chars。

** BTW我的文本文件编码是UTF8。

2 个答案:

答案 0 :(得分:5)

阅读该文件应该不是问题。相反,当您尝试将数据存储在rich-edit控件中时,更有可能出现此问题。那些控件不接受任意二进制数据。您需要确保只将文本放在该控件中。

将文件加载到普通字符串或流中:

var
  s: string;
  ss: TStringStream;

s := TFile.ReadAllText(FileName);

然后删除无效字符。 #0是Delphi中表示空字符的符号。通常,我们可能会使用StringReplace删除字符:

s := StringReplace(s, #0, '', [rfReplaceAll]);

但是,它不是二元安全的;它停止在空字符。相反,您需要一个不同的功能来删除这些字符。 I've demonstrated that before。调用该函数来调整字符串:

RemoveNullCharacters(s);

最后,将数据放在rich-edit控件中:

ss := TStringStream.Create(s);
try
  RichEdit1.Lines.LoadFromStream(ss, Encoding);
finally
  ss.Free;
end;

答案 1 :(得分:1)

您确定它是UTF8而不是UNICODE文件吗?您可能知道UNICODE是两个字节,其中第一个是非UNICODE语言的空字符,例如中文等。 您是否尝试使用IDE编辑器打开文件?打开它,选择所有文本(Ctrl + A)并复制(Ctrl + C)创建一个新的空文本文件并粘贴(Ctrl + V)文本。 保存新文件并使用此新文件尝试RichEdit。