我曾几个月前提出了一个类似的问题链接。多亏了Rob Kennedy,我可以把整个文本加载到
现在看这段代码:
Richedit
中,但是我无法删除Null chars
。我能够加载我的文本是因为我使用了Stream
。
现在看这段代码:
var
strm : TMemorystream;
str : UTF8string;
ss : TStringstream;
begin
strm := tmemorystream.Create;
try
strm.LoadFromFile('C:\Text.txt');
setstring(str,PAnsichar(strm.Memory),strm.Size);
str := StringReplace(str, #0, '', [rfReplaceAll]); //This line doesn't work at all
ss := tstringstream.Create(str);
Richedit1.Lines.LoadFromStream(ss);
finally
strm.Free;
ss.Free;
end;
end;
我将 TMemorystream
转换为 string
,使用 StringReplace()
去除了其中的 Null Chars
,然后再将其转换回 TStringstream
,最后使用 Richedit.lines.LoadFromStream
加载。
但我的问题是,我无法使用 StringReplace()
去除 Null Character
。我可以替换其他字符,但不能替换 #0
。
有没有直接在 TMemorystream
中去除 null charcters 并加载到 Richedit
的方法?如果不可能或者很复杂,那么当我将文本转换为 string
时,如何去除这些字符呢?
谢谢。
StringReplace
的缺点,并链接到另一个答案,该答案可以完成相同的任务。 - Rob KennedyUTF8string
更改为string
时,文本将变得无法读取。 - Sky<meta>
标记进行指定。在将数据解码为Unicode时必须使用正确的字符集。你不能随意加载使用任何字符集的数据,否则这样会导致数据丢失。 - Remy Lebeau