我正在使用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)
函数(不确定这是正确使用的函数),但结果相同。
我错过了什么吗?
答案 0 :(得分:2)
这与Delphi无关。默认情况下,SQL Server管理工作室以unicode格式保存.SQL文件。您可以指示应用程序使用不同的编码进行保存。
在SQL Server 2012中,查看File
,然后Advanced Save Options
:
选择您喜欢的任何(非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;