加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Delphi 2010中的编码错误

发布时间:2020-12-15 09:15:54 所属栏目:大数据 来源:网络整理
导读:我正在测试Delphi 2010,我遇到了以下错误: 我输入这个字符链“096 – Constru??oLtda”并且我只将她/它移动到另一个变量并且看看他/它留下什么“096 – Constru?§?£o Ltda”,有没有人知道如何找出那个??? 入口基地 001AlcidesJo?oPereira 002AlvirMa?anei
我正在测试Delphi 2010,我遇到了以下错误:
我输入这个字符链“096 – Constru??oLtda”并且我只将她/它移动到另一个变量并且看看他/它留下什么“096 – Constru?§?£o Ltda”,有没有人知道如何找出那个???

入口基地

001AlcidesJo?oPereira
002AlvirMa?aneiro
003AutoElétricaImmuraLtda
004AutoPe?asAraújo
005AutoPe?asPortoEixo Ltda
006AutoPe?asUni?o
007 Azambuja Industria Comercio de MateriaisdeConstru??oLtda
008 Balaroti Comercio De MateriaisDeConstru??oLtda
009BaldisseraLogísticaeTransportes Ltda Me
010BattistellaVeículosPesadosLtda
011 Berton DieselAutoPe?as
012 Bisolo MateriaisdeConstru??oLtda

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
002 – AlvirMa?aneiro
003 – AutoEl??trica Imamura Ltda
004 – AutoPe?§asAra?ojo
005 – AutoPe?§asPortoEixo Ltda
006 – AutoPe?§asUni?£o
007 – Azambuja Industria Comercio de MateriaisdeConstru?§?£o Ltda
008 – Balaroti Comercio De MateriaisDeConstru?§?£o Ltda
009 – BaldisseraLog?sticaeTransportes Ltda Me
010 – BattistellaVe?culosPesadosLtda
011 – Berton DieselAutoPe?a
012 – Bisolo MateriaisdeConstru?§?£o Ltda

解决方法

不要使用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.实际上,它可以读取您拥有的所有类型的文本文件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读