Delphi 2010中的编码错误
我正在测试Delphi 2010,我遇到了以下错误:
我输入这个字符链“096 – Constru??oLtda”并且我只将她/它移动到另一个变量并且看看他/它留下什么“096 – Constru?§?£o Ltda”,有没有人知道如何找出那个??? 入口基地 001AlcidesJo?oPereira procedure TForm1.Button2Click(Sender: TObject); var tfEntrada : TextFile; intI,intJ : Integer; strA,strS : String; procedure lerUm; //To read a registration of the file text begin inc( intI ); ReadLn( tfEntrada,strS ); strA := Copy( IntToStr( intI + 1000 ),2,3 ) + ' - '; Edit1.Text := strS; end; begin intI := 0; AssignFile( tfEntrada,'nomes_tst_0001.txt' ); Reset( tfEntrada ); lerUm; while not Eof ( tfEntrada ) do begin mmEntrada.Lines.Add( strA + strS ); //I move for TMemo(mmEntrada,mmSaida),in the form mmSaida.Lines.Add( strA + strS ); lerUm; end; CloseFile( tfEntrada ); end; 结果基础 001 – AlcidesJo?£o Pereira 解决方法
不要使用AssignFile.它是遗留代码,不适用于UnicodeStrings.而是使用TStringList或TFileStream来读取文件.
[未测试] procedure ReadFile; var vFileReader : TstringList; begin vFileReader := TStringList.Create; try vFileReader.LoadFromFile('nomes_tst_0001.txt'); mmEntrada.Lines.Assign(vFileReader); finally vFileReader.Free; end; end; EDITED 另一个不错的解决方案是我很久以前写的跟随功能: [测试] function GetFileAsString(aFileName: string; aOffSet : Integer = 0; aChunkSize: Integer = -1): string; var vStream: TFileStream; vBuffer: TBytes; vCurEncoding,vDefEncoding: TEncoding; vOffSet: Integer; vFileSize: Int64; begin vCurEncoding := nil; vDefEncoding := TEncoding.Default; vStream := TFileStream.Create(aFileName,fmOpenRead + fmShareDenyNone); try if aChunkSize > 0 then begin vFileSize := aChunkSize; end else begin vFileSize := vStream.Size; end; vStream.Position := aOffSet; SetLength(vBuffer,vFileSize); vStream.ReadBuffer(Pointer(vBuffer)^,vFileSize); vOffSet := TEncoding.GetBufferEncoding(vBuffer,vCurEncoding); if (vCurEncoding <> vDefEncoding) then begin vBuffer := TEncoding.Convert(vCurEncoding,vDefEncoding,vBuffer,vOffSet,vFileSize - vOffSet); end; Result := vDefEncoding.GetString(vBuffer); finally vStream.Free; end; end; 此函数能够处理unicode字符串(带BOM)和ansistring.实际上,它可以读取您拥有的所有类型的文本文件. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |