16.07.2010, 23:31
|
Тыкаю клавиши
|
|
Регистрация: 13.07.2009
Сообщения: 804
Версия Delphi:
Репутация: 48633
|
|
Код:
unit UTF8;
interface
uses Classes;
type
TFormatterBase=class
public
procedure SaveToFile(AStream : TStream; AText : String); virtual; abstract;
function LoadFromFile(AStream : TStream) : String; virtual; abstract;
function IsFormat(AStream : TStream) : Boolean; virtual; abstract;
end;
TFormatterUTF8=class(TFormatterBase)
private
Function FormatToAscii(s:UTF8string):AnsiString;
Function AsciiToFormat(s:AnsiString):UTF8String;
public
procedure SaveToFile(AStream : TStream; AText : String); override;
function LoadFromFile(AStream : TStream) : String; override;
function IsFormat(AStream : TStream) : Boolean; override;
end;
implementation
{ TFormatterUTF8 }
function TFormatterUTF8.AsciiToFormat(s: AnsiString): UTF8String;
var
L: Integer;
Temp: UTF8String;
begin
Result := '';
if S = '' then Exit;
SetLength(Temp, Length(S) * 3);
L := UnicodeToUtf8(PChar(Temp), Length(Temp)+1, PWideChar(S), Length(S));
if L > 0 then
SetLength(Temp, L-1)
else
Temp := '';
Result := Temp;
end;
function TFormatterUTF8.FormatToAscii(s: UTF8string): AnsiString;
var
L: Integer;
Temp: WideString;
begin
Result := '';
if S = '' then Exit;
SetLength(Temp, Length(S));
L := Utf8ToUnicode(PWideChar(Temp), Length(Temp)+1, PChar(S), Length(S));
if L > 0 then
SetLength(Temp, L-1)
else
Temp := '';
Result := Temp;
end;
function TFormatterUTF8.IsFormat(AStream: TStream): Boolean;
var
b:cardinal;
const
sign=$BFBBEF;
begin
AStream.ReadBuffer(b,3);
Result:=sign=b;
end;
function TFormatterUTF8.LoadFromFile(AStream: TStream): String;
var
Str:TStringStream;
begin
if IsFormat(AStream) then
begin
Str:=TStringStream.Create(Result);
Str.CopyFrom(AStream,AStream.Size);
Result:=FormatToAscii(Result);
Str.Free;
end;
end;
procedure TFormatterUTF8.SaveToFile(AStream: TStream; AText: String);
begin
inherited;
end;
end.
Пока нет сохранения в файл - там компилятор пишет Variable required
|