我用SQL SERVER生成的SQL脚本文件,如果文件格式使用默认的国际化文本(Unicode)的话,在程序中无论是用TStrings还是TMemoryStream的LoadFromFile,或者使用TextFile直接进行ReadLn或者Read都无法读取正确的文本信息(读出来的是一小段看不懂的乱码,用记事本直接打开该文件的话看到的也是正确的文本)。只有在生成SQL脚本时选中“WINDOWS文本(ANSI)”文件格式才可以用上述方法读取。
请问如何才能从Unicode文件格式的文件中读取文本信息?
请问如何才能从Unicode文件格式的文件中读取文本信息?
FileStrm: TFileStream;
FileContent: WideString;
ContentSize: Integer;
begin
FileStrm := TFileStream.Create('E:\test.txt', fmOpenRead);
ContentSize := FileStrm.Size - 2;
SetLength(FileContent, ContentSize div 2);
FileStrm.Position := 2;//跳过Unicode标志
FileStrm.Read(FileContent[1], ContentSize);
Memo1.Lines.Text := FileContent;
FileStrm.Free;
end;
这是Unicode格式,如果是UTF-8格式就只能作为String读出来再用API去转换了。如果要处理Ansi和Unicode两种格式可以先读取前两个Ansi字符,如果分别是#$FF和#$FE则是Unicode格式。