대신 GpTextStream을 사용하여 HTML을 검색 한 후 역 변환을 직접 수행했습니다. 문서를 ISO-8859-1에 맞게 만들면 직선적 인 Delphi를 사용하여 처리 할 수있게되어 코드 변경 사항이 상당히 줄어 들었습니다. 출력시 모든 데이터가 UTF-8로 변환되었습니다.
일부 코드가 있습니다. 아마도 가장 좋은 해결책은 아니지만 시간을 절약하면서 작업을 완료 할 수 있습니다. 이는 의 역방향 변환에 해당합니다.
procedure UTF8FileTo88591(fileName: string);
const bufsize=1024*1024;
var
fs1,fs2: TFileStream;
ts1,ts2: TGpTextStream;
buf:PChar;
siz:integer;
procedure LG2(ss:string);
begin
//dont log for now.
end;
begin
fs1 := TFileStream.Create(fileName,fmOpenRead);
fs2 := TFileStream.Create(fileName+'_ISO88591.txt',fmCreate);
//compatible enough for my purposes with default 'Windows/Notepad' CP 1252 ANSI and Swe ANSI codepage, Latin1 etc.
//also works for ASCII sources with htmlencoded accent chars, naturally
try
LG2('Files opened OK.');
GetMem(buf,bufsize);
ts1 := TGpTextStream.Create(fs1,tsaccRead,[],CP_UTF8);
ts2 := TGpTextStream.Create(fs2,tsaccWrite,[],ISO_8859_1);
try
siz:=ts1.Read(buf^,bufsize);
LG2(inttostr(siz)+' bytes read.');
if siz>0 then ts2.Write(buf^,siz);
finally
LG2('Bytes read and written OK.');
FreeAndNil(ts1);FreeAndNil(ts2);end;
finally FreeAndNil(fs1);FreeAndNil(fs2);FreeMem(buf);
LG2('Everything freed OK.');
end;
end; // UTF8FileTo88591
감사합니다. 문제는 Synapse가이 작업을 수행할지 또는 다른 코드를 작성해야하는지 여부입니다. 그것은 보통 어떻게 이루어 집니까? –
@Henrik : 마지막으로 확인했는데, Synapse가 자동으로 데이터를 디코딩하지 않습니다. HTTP 헤더 및/또는 HTML 내용을 직접 확인한 다음 데이터를 수동으로 해독해야합니다. FWIW, 현재 버전의 Indy 10은 파싱 및 디코딩을 수행합니다. –