소스파일 자체의 인코딩도 UTF-8이고 페이지세팅도 UTF-8일 경우,
아래와 같은 형태로 가져오면 됨.
function getURLContent(URL: String): String;
var
IdHTTP1: TIdHTTP;
Stream: TBytesStream;
begin
Result:='';
Stream := TBytesStream.Create;
IdHTTP1:=TIdHTTP.Create(nil);
try
IdHTTP1.Get(URL, Stream, []);
Result:=TEncoding.UTF8.GetString(Stream.Bytes, 0, Stream.Size);
finally
FreeAndNil(IdHTTP1);
FreeAndNil(Stream);
end;
end;
중요한 것은 TEncoding
아래와 같은 property 를 가지고 있으므로 인코딩에 따라 적절하게 사용하면 될 듯.
TEncoding.ASCII - Returns an encoding for the ASCII character set.
TEncoding.BigEndianUnicode - Returns an encoding for the UTF-16 format with big-endian byte order.
TEncoding.Default - Returns an encoding for the operating system`s default ANSI code page.
TEncoding.Unicode - Returns an encoding for the UTF-16 format with little-endian byte order.
TEncoding.UTF7 - Returns an encoding for the UTF-7 format.
TEncoding.UTF8 - Returns an encoding for the UTF-8 format.
TEncoding.BigEndianUnicode - Returns an encoding for the UTF-16 format with big-endian byte order.
TEncoding.Default - Returns an encoding for the operating system`s default ANSI code page.
TEncoding.Unicode - Returns an encoding for the UTF-16 format with little-endian byte order.
TEncoding.UTF7 - Returns an encoding for the UTF-7 format.
TEncoding.UTF8 - Returns an encoding for the UTF-8 format.
아래는 RAD Studio VCL Reference 의 예제
{
This example determines the encoding of a source file and then
write the file in any encoding chosen. Use this project to
create files of any encoding. This example requires two text edits
and a combobox.
}
procedure TForm1.Button1Click(Sender: TObject);
var
LBuffer: TBytes;
LByteOrderMark: TBytes;
LOffset: Integer;
LEncoding, DestEncoding: TEncoding;
LFileStream: TFileStream;
EncodingArray: array[0..5] of TEncoding;
begin
LEncoding:= nil;
EncodingArray[0]:= TEncoding.UTF8;
EncodingArray[1]:= TEncoding.UTF7;
EncodingArray[2]:= TEncoding.Unicode;
EncodingArray[3]:= TEncoding.Default;
EncodingArray[4]:= TEncoding.BigEndianUnicode;
EncodingArray[5]:= TEncoding.ASCII;
DestEncoding := EncodingArray[ComboBox1.ItemIndex];
LFileStream := TFileStream.Create(Edit1.Text, fmOpenRead);
try
// Read file into buffer
SetLength(LBuffer, LFileStream.Size);
// LFileStream.Read(LBuffer[0], Length(LBuffer));
LFileStream.ReadBuffer(Pointer(LBuffer)^, Length(LBuffer));
// Identify encoding and convert buffer to UTF8
LOffset := TEncoding.GetBufferEncoding(LBuffer, LEncoding);
// for I := 0 to Length(LBuffer) - 1 do
// Memo1.Lines.Add((LBuffer[I]));
LBuffer := LEncoding.Convert(LEncoding, DestEncoding, LBuffer,
LOffset, Length(LBuffer) - LOffset);
finally
LFileStream.Free;
end;
LFileStream := TFileStream.Create(Edit2.Text, fmCreate);
try
// Write an encoding byte order mark and buffer to output file
LByteOrderMark := DestEncoding.GetPreamble;
LFileStream.Write(LByteOrderMark[0], Length(LByteOrderMark));
LFileStream.Write(LBuffer[0], Length(LBuffer));
finally
LFileStream.Free;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
StringList: TStrings;
begin
StringList := TStringList.Create;
try
with StringList do begin
Add('TEncoding.UTF8');
Add('TEncoding.UTF7');
Add('TEncoding.Unicode');
Add('TEncoding.Default');
Add('TEncoding.BigEndianUnicode');
Add('TEncoding.ASCII');
end;
with ComboBox1 do begin
Items.Assign(StringList);
ItemIndex := 0;
end;
finally
StringList.free;
end;
end;
This example determines the encoding of a source file and then
write the file in any encoding chosen. Use this project to
create files of any encoding. This example requires two text edits
and a combobox.
}
procedure TForm1.Button1Click(Sender: TObject);
var
LBuffer: TBytes;
LByteOrderMark: TBytes;
LOffset: Integer;
LEncoding, DestEncoding: TEncoding;
LFileStream: TFileStream;
EncodingArray: array[0..5] of TEncoding;
begin
LEncoding:= nil;
EncodingArray[0]:= TEncoding.UTF8;
EncodingArray[1]:= TEncoding.UTF7;
EncodingArray[2]:= TEncoding.Unicode;
EncodingArray[3]:= TEncoding.Default;
EncodingArray[4]:= TEncoding.BigEndianUnicode;
EncodingArray[5]:= TEncoding.ASCII;
DestEncoding := EncodingArray[ComboBox1.ItemIndex];
LFileStream := TFileStream.Create(Edit1.Text, fmOpenRead);
try
// Read file into buffer
SetLength(LBuffer, LFileStream.Size);
// LFileStream.Read(LBuffer[0], Length(LBuffer));
LFileStream.ReadBuffer(Pointer(LBuffer)^, Length(LBuffer));
// Identify encoding and convert buffer to UTF8
LOffset := TEncoding.GetBufferEncoding(LBuffer, LEncoding);
// for I := 0 to Length(LBuffer) - 1 do
// Memo1.Lines.Add((LBuffer[I]));
LBuffer := LEncoding.Convert(LEncoding, DestEncoding, LBuffer,
LOffset, Length(LBuffer) - LOffset);
finally
LFileStream.Free;
end;
LFileStream := TFileStream.Create(Edit2.Text, fmCreate);
try
// Write an encoding byte order mark and buffer to output file
LByteOrderMark := DestEncoding.GetPreamble;
LFileStream.Write(LByteOrderMark[0], Length(LByteOrderMark));
LFileStream.Write(LBuffer[0], Length(LBuffer));
finally
LFileStream.Free;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
StringList: TStrings;
begin
StringList := TStringList.Create;
try
with StringList do begin
Add('TEncoding.UTF8');
Add('TEncoding.UTF7');
Add('TEncoding.Unicode');
Add('TEncoding.Default');
Add('TEncoding.BigEndianUnicode');
Add('TEncoding.ASCII');
end;
with ComboBox1 do begin
Items.Assign(StringList);
ItemIndex := 0;
end;
finally
StringList.free;
end;
end;
'Delphi' 카테고리의 다른 글
[Delphi] Mutex로 중복실행 방지 (0) | 2009.06.21 |
---|---|
[Delphi] 클립보드 HTML Format 제어 (0) | 2009.06.20 |
Delphi&PHP 언어간의 암호화 시스템 호환 (0) | 2009.04.30 |
캡션없는 윈도우 마우스 드래그로 움직이기 (0) | 2009.04.30 |
Delphi2009 Indy10 에서 한글 깨짐 문제 (0) | 2009.04.28 |