Código
de UTF-8.
Obervar que é necessário utilizar a função Utf8Encode() para garantir
que o TXT está escrito no padrão UTF.
São duas coisas diferentes: ter o TXT codificado UTF ( que a função Utf8Encode()
faz ), e gravá-lo informando que é UTF para outros programas que irão
ler este arquivo e reconhecer como utf-8.
Autor: Jorge J. Maurer - São Paulo/SP, 06/01/2008
Fonte de Pesquisa: Internet http://www.geocities.com/pmpg98_pt/CharacterEncoding.html
"Próspero é quem faz os outros prosperarem". Henry Ford
}
unit Fgrava_utf8;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, StdCtrls;
type
TF_GRAVA_UTF8 = class(TForm)
Memo1: TMemo;
SpeedButton1: TSpeedButton;
procedure SpeedButton1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
F_GRAVA_UTF8: TF_GRAVA_UTF8;
implementation
Procedure SalvaComoUTF8( const P_PATH_E_NOME_ARQUIVO:String; P_ARQUIVO_MEMO: TStrings );
const
cUTF8 = $BFBBEF;
var
W_TXT: UTF8String;
fs: TFileStream;
wBOM: Integer;
begin
if TRIM(P_ARQUIVO_MEMO.Text) <> '' then begin
//se o arquivo estiver vazio, iria gerar uma excessão !!!
W_TXT:= P_ARQUIVO_MEMO.Text;
fs:= Tfilestream.create( P_PATH_E_NOME_ARQUIVO, fmCreate );
try
wBOM := cUTF8;
//aqui está o "segredo"...
//inserir o B.O.M. no início do arquivo, antes do texto.
fs.WriteBUffer( wBOM, sizeof(wBOM)-1);
//aqui, grava o texto que nos interessa...
fs.WriteBuffer( W_TXT[1], Length(W_TXT)*Sizeof( W_TXT[1] ));
finally
fs.free
end;
end;
end;
{$R *.dfm}
procedure TF_GRAVA_UTF8.SpeedButton1Click(Sender: TObject);
begin
Memo1.Clear;
Memo1.Lines.Add(Utf8Encode('Arquivo teste txt'));
Memo1.Lines.Add(Utf8Encode('para gravação (observem a acentuação no arq txt)'));
Memo1.Lines.Add(Utf8Encode('no formato UTF-8'));
Memo1.Lines.Add(Utf8Encode('com caracteres de controle "B.O.M."'));
Memo1.Lines.Add(Utf8Encode('"B.O.M." = Byte Order Mark'));
SalvaComoUTF8('C:TESTE_UTF8.TXT',Memo1.Lines);
{ após a chamada da procedure, abra o arquivo com o NOTEPAD,
acesse o menu -> Salvar Como e verifique o tipo do arquivo,
que deverá estar como UTF-8 no box. Isso indica que ele
foi gerado corretamente como a NF Paulista requer. }
end;
end.
Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009