Delphi 2010中这个编码错误是哪个库函数调用不当导致的?

2026-04-10 16:322阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计563个文字,预计阅读时间需要3分钟。

Delphi 2010中这个编码错误是哪个库函数调用不当导致的?

我正在测试Delphi 2010,遇到了以下错误:输入了字符链096 – Construçãoltda,并且仅将它们/它移动到另一个变量中,然后查看它/留下什么096 – Construçãoltda,似乎没有人知道这个意思。

Delphi 2010中这个编码错误是哪个库函数调用不当导致的?

我正在测试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újo
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.实际上,它可以读取您拥有的所有类型的文本文件.

本文共计563个文字,预计阅读时间需要3分钟。

Delphi 2010中这个编码错误是哪个库函数调用不当导致的?

我正在测试Delphi 2010,遇到了以下错误:输入了字符链096 – Construçãoltda,并且仅将它们/它移动到另一个变量中,然后查看它/留下什么096 – Construçãoltda,似乎没有人知道这个意思。

Delphi 2010中这个编码错误是哪个库函数调用不当导致的?

我正在测试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újo
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.实际上,它可以读取您拥有的所有类型的文本文件.