0

Delphi 7 Professional の Synapse で HttpGetText を使用して Web ページのソースを取得していますが、任意のコンポーネントやコードをお勧めします。

目標は、非 ASCII 文字を 1 つの文字セットに「統一」することで時間を節約し、同じ Delphi コードで処理できるようにすることです。

だから、「メモ帳++ですべてを選択してBOMなしでUTFに変換する」に似たものを探しています。UTF8 の代わりに ANSI も問題ありません。

Web ページは 3 つの文字セットでエンコードされます: UTF8、「ISO-8859-1=Win 1252=ANSI」、および文字セット仕様のない路地 HTML4 をまっすぐに使用します。コンテンツ内のhtmlencodedÅタイプの文字。

変換を行う PHP ページをコーディングする必要がある場合でも、それは問題ありません。最小のコード/時間は何でも。

4

2 に答える 2

0

代わりに、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
于 2011-06-13T07:09:17.837 に答える
0

Web ページを取得すると、そのContent-Typeヘッダー (場合によって<meta>は HTML 自体内のタグ) が、データに使用されている文字セットを示します。その文字セットを使用してデータを Unicode にデコードし、Unicode を処理に必要なものにエンコードできます。

于 2011-03-31T22:13:18.147 に答える