AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Umlaute von UTF16 (?) zu UTF8 codieren
Thema durchsuchen
Ansicht
Themen-Optionen

Umlaute von UTF16 (?) zu UTF8 codieren

Ein Thema von xZise · begonnen am 26. Jul 2009 · letzter Beitrag vom 26. Jul 2009
Antwort Antwort
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

Umlaute von UTF16 (?) zu UTF8 codieren

  Alt 26. Jul 2009, 15:23
Hallo ihr,
da wir Turbo Delphi und Delphi 2009 gleichzeitig einsetzen, ist die Speicherung in einer SQLite Datenbank etwas fummelig. Anfangs haben wir die Ansistrings von TDE mittels "AnsiToUTF8" und umgekehrt kodiert. Das lief auch immer wunderbar. Aber sobald ich das unter Delphi 2009 verwende gibt das Probleme, da er mit UTF8 direkt umgehen kann.

An sich natürlich perfekt, aber sobald ich dann das in einen AnsiString umwandle gibt es Probleme. Inzwischen konnte ich das beheben, indem ich via Compilerschalter prüfe ob "Unicode" gesetzt ist. Jetzt geht nur nicht mehr das Speichern der Daten. Und zwar habe ich einen Unicodestring (also doch UTF16 oder?) mit Umlauten. Wie kann ich nun den in einen UTF8-String (ohne BOM... den brauch ich nicht) umwandeln? Bisher steht bei mir der Code:
Delphi-Quellcode:
function TDatenbankWrapper.EncodeUTF(const ASource: string): string;
begin
  Result := {$IFDEF Unicode}UTF8Encode{$ELSE}AnsiToUtf8{$ENDIF}(ASource);
  if Result = 'then
    Result := ASource;
end;
Leider codiert aber UTF8Encode nicht richtig (es kommt ein Leerstringdas gleiche heraus). Das heißt er verwendet dann den UTF16 String, was nicht gut geht.

[edit]Selbst ein Result := ändert daran nichts. Nur, dass der Ergebnisstring nicht leer ist. Stattdessen steht in Result GENAU das gleiche wie in ASource[/edit]

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: Umlaute von UTF16 (?) zu UTF8 codieren

  Alt 26. Jul 2009, 15:34
Es könnte sein, dass du das Zeug in UTF8 konvertierst und dann aber (implizit) wieder in string (also UnicodeString) konvertiert wird - möglich dass da das gleiche rauskommt ...

Probier mal, unter D2009 den Rückgabewert als UTF8string zu deklarieren
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Umlaute von UTF16 (?) zu UTF8 codieren

  Alt 26. Jul 2009, 15:40
Hmm okay... Das sieht schon mal besser aus, weil jetzt nur der Umlaut mit 2 Bytes codiert wurde und die normalen Zeichen (a..zA..Z) mit einem Byte.

Aber weiter hackt es dann. Aber das muss ich mir dann mal ansehen.

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#4

Re: Umlaute von UTF16 (?) zu UTF8 codieren

  Alt 26. Jul 2009, 16:52
den Typ des UTF8String gibt's ja auch schon in Delphi2006 (sogar mindestens D7)


vergiß nicht, daß hier Result = UnicodeString (unter D2009) is und demnach nun Delphi den UTF8String an einen UnicodeString zuweist
Delphi-Quellcode:
function TDatenbankWrapper.EncodeUTF(...): string;
  Result := [UTF8]
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:35 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