Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi String (Ansi/UTF16) nach UTF8 (https://www.delphipraxis.net/139413-string-ansi-utf16-nach-utf8.html)

xZise 28. Aug 2009 11:09

Datenbank: SQLite • Version: 3 • Zugriff über: A simple Delphi wrapper for Sqlite 3

String (Ansi/UTF16) nach UTF8
 
Hallo ihr,

SQLite verwendet ja UTF8 oder UTF16. Nun ist das beim aktuellen Wrapper den ich verwende ( http://www.itwriting.com/blog/a-simp...r-for-sqlite-3 ), so dass er soweit das gesehen habe nur UTF8 einsetzt. Jetzt möchte ich, dass wenn man jetzt die Datenbank öffnet, man einen String übergeben kann und je nach Delphi ist das dann ja ein AnsiString oder ein UnicodeString. Wie kann ich jetzt einfach sagen:
String rein -> UTF8 raus
Eventuell sogar auch andersherum?

Oder geht das nur so:
Delphi-Quellcode:
function DecodeUTF(const ASource: UTF8String): string;
begin
  Result := {$IFNDEF Unicode}Utf8ToAnsi{$ENDIF}(ASource);
  if Result = '' then
    Result := ASource;
end;

function EncodeUTF(const ASource: string): UTF8String;
begin
  Result := {$IFDEF Unicode}UTF8Encode{$ELSE}AnsiToUtf8{$ENDIF}(ASource);
  if Result = '' then
    Result := ASource;
end;
MfG
xZise

himitsu 28. Aug 2009 11:30

Re: String (Ansi/UTF16) nach UTF8
 
Wenn du String verwendest und es in D2009/10 oder jünger verwendet wird, dann einfach UTF8Encode Und UTF8ToString, dann paßt sich das schon automatisch an

Delphi-Quellcode:
{$IF not Declared(UnicodeString)} Type UnicodeString = WideString; {$IFEND}

Procedure DecodeUTF(const ASource: UTF8String; Var S: AnsiString); Overload;
begin
  S := Utf8ToAnsi(ASource);
end;

Procedure DecodeUTF(const ASource: UTF8String; Var S: UnicodeString); Overload;
begin
  S := UTF8ToWideString(ASource);
end;

function EncodeUTF(const ASource: AnsiString): UTF8String; Overload;
begin
  Result := UTF8Encode(ASource);
end;

function EncodeUTF(const ASource: UnicodeString): UTF8String; Overload;
begin
  Result := UTF8Encode(ASource);
end;

// PS: UTF8Encode ist schon überladen, also kannst du es auch direkt nutzen

xZise 28. Aug 2009 11:41

Re: String (Ansi/UTF16) nach UTF8
 
Ah stimmt ;) Er zeigt mir in der Vervollständigung aber nur WideString an ^^ aber da zeigt er ja eine Überladungen an.

MfG
xZise

himitsu 28. Aug 2009 11:56

Re: String (Ansi/UTF16) nach UTF8
 
ja, die Autovervollständigung hat da eine kleine Unzulänglichkeit in ihrer Anzeige :?

ist praktisch die selbe Ursache wie hier
http://www.delphipraxis.net/internal...t.php?t=158509
dadurch daß nicht auf andere überladene Funktion hingewiesen wird, kommt es halt zu solchen Problemen.

xZise 28. Aug 2009 12:16

Re: String (Ansi/UTF16) nach UTF8
 
Hmmm wegen deprecated:
Wenn ich einen String in einen UTF8 String umwandeln will nehme ich UTF8Encode. Aber andersherum meldet er das UTF8Decode deprecated ist. Soll man stattdessen UTF8ToString nehmen?

MfG
xZise

himitsu 28. Aug 2009 12:24

Re: String (Ansi/UTF16) nach UTF8
 
jupp

abgesehn davon, wandelt UTF8Decode immer in einen WideString

also am Einfachsten immer dieses und String verwenden, das past sich dann ans Delphi an
UTF8Encode <= AnsiString/WideString/UnicodeString/String nach UTF8
UTF8ToString <= von UTF8 nach String (AnsiString oder ab D2009 UnicodeString)

oder du gibst selber den Typen vor
UTF8Encode <= AnsiString/WideString/UnicodeString/String nach UTF8
Utf8ToAnsi <= von UTF8 nach AnsiString
UTF8ToWideString <= von UTF8 nach WideString
UTF8ToUnicodeString <= von UTF8 nach UnicodeString

xZise 28. Aug 2009 12:40

Re: String (Ansi/UTF16) nach UTF8
 
Nein das ist schon gut so, dass sich das anpasst. Weil dann erspare ich mir das ganze zu gucken ob das jetzt ein Wide/AnsiString ist ;)

MfG
xZise


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz