Thema: Delphi Unicode + BASE64?

Einzelnen Beitrag anzeigen

blackdrake

Registriert seit: 21. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#45

Re: Unicode + BASE64?

  Alt 26. Aug 2007, 19:20
Hallo marabu

dass es so einfach mit deinem "StringAsWideString" geht, hätte ich nicht gedacht. Ich dachte eigentlich, ich hätte gestern alles mögliche mit [0], [1], @ und ^ ausprobiert.

Mit dem UTF 8 habe ich aber noch eine Frage: Soll ich

a) UTF8Decode und UTF8Encode
b) UTF8ToWideString und WideStringToUTF8 ( http://www.delphipraxis.net/internal...=644577#644577 )

verwenden? Bin irgendwie ein bißchen verwirrt... Ich mach jetzt vorerst mal nicht den Test mit den japanischen Zeichen. Vielleicht kannst du mir die Lösung direkt sagen, was besser ist.

Hier ein Codebeispiel:

Delphi-Quellcode:
// [url]http://www.delphipraxis.net/post644577.html#644577[/url]

function StringToWideStringEx(const S: string; CodePage: Word): WideString;
var
  InputLength,
  OutputLength: Integer;
begin
  InputLength := Length(S);
  OutputLength := MultiByteToWideChar(CodePage, 0, PChar(S), InputLength, nil, 0);
  SetLength(Result, OutputLength);
  MultiByteToWideChar(CodePage, 0, PChar(S), InputLength, PWideChar(Result), OutputLength);
end;

function WideStringToStringEx(const WS: WideString; CodePage: Word): string;
var
  InputLength,
  OutputLength: Integer;
begin
  InputLength := Length(WS);
  OutputLength := WideCharToMultiByte(CodePage, 0, PWideChar(WS), InputLength, nil, 0, nil, nil);
  SetLength(Result, OutputLength);
  WideCharToMultiByte(CodePage, 0, PWideChar(WS), InputLength, PChar(Result), OutputLength, nil, nil);
end;

function UTF8ToWideString(const S: string): WideString;
begin
   Result := StringToWideStringEx(S, CP_UTF8);
end;
function WideStringToUTF8(const WS: WideString): string;
begin
   Result := WideStringToStringEx(WS, CP_UTF8);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if Utf8Decode(Utf8Encode(widestring('Täst'))) = 'Tästthen
  begin
    showmessage('OK'); // Wahr
  end;

  if widestring('Testä') = UTF8ToWideString(WideStringToUTF8(widestring('Testä'))) then
  begin
    showmessage('OK'); // Wahr
  end;
end;
EDIT: Ich sehe gerade, dass WideStringToStringEx() etwas mit den Codepages macht, was ich ja nicht will. Ich will codepageunabhängig den WideString temporär in einen String-Typ umwandeln, ohne dass Informationen verloren gehen. Ist WideStringToStringEx() dann die falsche Variante?

Gruß
blackdrake
Daniel Marschall
  Mit Zitat antworten Zitat