unit util_utf8; interface uses Windows; type UTF8String = AnsiString; function AnsiToWide(const S: AnsiString): WideString; function WideToUTF8(const WS: WideString): UTF8String; function AnsiToUTF8(const S: AnsiString): UTF8String; function UTF8ToWide(const US: UTF8String): WideString; function WideToAnsi(const WS: WideString): AnsiString; function UTF8ToAnsi(const S: UTF8String): AnsiString; implementation function AnsiToWide(const S: AnsiString): WideString; var len: integer; ws: WideString; begin Result:=‘‘; if (Length(S) = 0) then exit; len:=MultiByteToWideChar(CP_ACP, 0, PChar(s), -1, nil, 0); SetLength(ws, len); MultiByteToWideChar(CP_ACP, 0, PChar(s), -1, PWideChar(ws), len); Result:=ws; end; function WideToUTF8(const WS: WideString): UTF8String; var len: integer; us: UTF8String; begin Result:=‘‘; if (Length(WS) = 0) then exit; len:=WideCharToMultiByte(CP_UTF8, 0, PWideChar(WS), -1, nil, 0, nil, nil); SetLength(us, len); WideCharToMultiByte(CP_UTF8, 0, PWideChar(WS), -1, PChar(us), len, nil, nil); Result:=us; end; function AnsiToUTF8(const S: AnsiString): UTF8String; begin Result:=WideToUTF8(AnsiToWide(S)); end; function UTF8ToWide(const US: UTF8String): WideString; var len: integer; ws: WideString; begin Result:=‘‘; if (Length(US) = 0) then exit; len:=MultiByteToWideChar(CP_UTF8, 0, PChar(US), -1, nil, 0); SetLength(ws, len); MultiByteToWideChar(CP_UTF8, 0, PChar(US), -1, PWideChar(ws), len); Result:=ws; end; function WideToAnsi(const WS: WideString): AnsiString; var len: integer; s: AnsiString; begin Result:=‘‘; if (Length(WS) = 0) then exit; len:=WideCharToMultiByte(CP_ACP, 0, PWideChar(WS), -1, nil, 0, nil, nil); SetLength(s, len); WideCharToMultiByte(CP_ACP, 0, PWideChar(WS), -1, PChar(s), len, nil, nil); Result:=s; end; function UTF8ToAnsi(const S: UTF8String): AnsiString; begin Result:=WideToAnsi(UTF8ToWide(S)); end; end.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP; type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; IdHTTP1: TIdHTTP; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses util_utf8; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var strm: TStringStream; begin strm := TStringStream.Create(‘‘); try IdHTTP1.Get(‘http://gz.ganji.com/zpshichangyingxiao/‘, strm); Memo1.Clear; Memo1.Lines.Add(UTF8ToAnsi(strm.DataString)); finally strm.Free; end; end; end.
时间: 2024-11-11 22:32:09