如何读取从.SQL文件转换的文本文件?

时间:2014-06-16 10:36:56

标签: sql-server delphi

我正在使用Delphi 2005。

我已经使用以下语句将一个SP.SQL文件(它是SQL Server的输出文件,即将所有存储过程导出到一个.sql文件中)复制到Delphi中的SP.TXT文件中:

sTempFileName := OpenDialog1.FileName;// file name with .sql as an extension
sTempFileName := StringReplace(sTempFileName, '.sql', '.txt',[rfReplaceAll, rfIgnoreCase]);
CopyFile(PChar(OpenDialog1.FileName), PChar(sTempFileName), False);

该文件转换为.txt格式,但是当我读到它时会以下面的格式读取

'ÿþS'#0'E'#0'T'#0' '#0'Q'#0'U'#0'O'#0'T'#0'E'#0'D'#0'_'#0'I'#0'D'#0'E'#0'N'#0'T'#0'I'#0'F'#0'I'#0'E'#0'R'#0' '#0'O'#0'F'#0'F'#0' '#0#0

我想以纯文本格式阅读。我尝试使用UTF8Encode(sText)函数(不确定这是正确使用的函数),但结果相同。

我错过了什么吗?

2 个答案:

答案 0 :(得分:2)

这与Delphi无关。默认情况下,SQL Server管理工作室以unicode格式保存.SQL文件。您可以指示应用程序使用不同的编码进行保存。

在SQL Server 2012中,查看File,然后Advanced Save Options

enter image description here

选择您喜欢的任何(非unicode)编码。 Delphi 2005无法正确读取文件的原因是它不能自然地支持unicode。

答案 1 :(得分:1)

对于使用Big Endian(UTF-16BE)的编码,以下函数可以用于nonunicode delphi版本,您可以增强它以进行其他编码:

Function GetFileAsString(const fn:String):String;
 var
 ss:AnsiString;
 ws: WideString;
 fs:TFileStream;
 len:Cardinal;
begin
  fs := TFileStream.Create(fn,fmopenRead or fmShareDenyNone);
  try
  SetLength(ss,2);
  fs.Read(ss[1],2);
  if ss=#$FF#$FE then // test encoding
    begin
      Setlength(ws,(fs.Size) div 2 - 1);
      len :=  fs.Size-2;
      fs.Read(ws[1],len);
      Result := UTF8Decode(ws);
    end;
  finally
   fs.Free;
  end;
end;