Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi D2009: Problem mit UTF8String und einzelnem Char (https://www.delphipraxis.net/121111-d2009-problem-mit-utf8string-und-einzelnem-char.html)

Zacherl 22. Sep 2008 16:05


D2009: Problem mit UTF8String und einzelnem Char
 
Hey,

ich habe einen UTF8String namens ContactStr. Jetzt möchte ich den String folgendermaßen zusammensetzen:

Delphi-Quellcode:
ContactStr := '1' + #$FE + BuddyUIN + #$FE + BuddyName + #$FE;
Sehr simpel. Unter D2007 funktioniert auch alles bestens und der erzeugte String lautet wie folgt:

Code:
1þ555888666þZacherlþ
Der selbe Code compiliert unter D2009 gibt mir allerdings immer nur folgende Ausgabe: :wall:

Code:
1þ555888666þZacherlþ
Ich verstehe das Problem nicht ganz. Vermutlich wird das erste $FE Zeichen fälschlicherweise in ein Unicode UTF8 Format konvertiert, obwohl dies nicht nötig wäre. Nur warum werden die weiteren $FE Zeichen nicht auch konvertiert und vor allem:

Kennt jemand eine Lösung für dieses Problem?

Gruß Zacherl

Win32.API 22. Sep 2008 16:07

Re: D2009: Problem mit UTF8String und einzelnem Char
 
Habe kein Delphi 09 hier, aber versuche mal das Ganze so zu schreiben:

Delphi-Quellcode:
ContactStr := '1' + AnsiChar($FE) + BuddyUIN + AnsiChar($FE) + BuddyName + AnsiChar($FE);

grenzgaenger 22. Sep 2008 16:08

Re: D2009: Problem mit UTF8String und einzelnem Char
 
Hab zwar kein D2009, aber setz doch einfach deinen string als AnsiString zusammen :-)

Delphi-Quellcode:
var
  ContactStr: TAnsiString;

Zacherl 22. Sep 2008 16:10

Re: D2009: Problem mit UTF8String und einzelnem Char
 
Ich werde das mal testen. Wobei ich vermute das dies nichts bringen wird, da ich ihn einer Funktion übergebe, die einen UTF8String als Parameter erwartet. Demnach wird dann ja wieder alles erneut konvertiert :mrgreen:

Edit: Selbst als AnsiString deklariert und mit dem Tip AnsiChar() zu verwenden, wird das erste Zeichen nach wie vor falsch kodiert. Und dies sogar schon bevor ich den String der anderen Funktion übergebe. :gruebel:

Uwe Raabe 22. Sep 2008 16:25

Re: D2009: Problem mit UTF8String und einzelnem Char
 
Delphi-Quellcode:
var
  Prefix: Utf8string;
begin
  Prefix := '1'; { sonst ist '1' ein Unicode-String!}
  ContactStr := Prefix + #$FE + BuddyUIN + #$FE + BuddyName + #$FE;
end;

Zacherl 22. Sep 2008 16:48

Re: D2009: Problem mit UTF8String und einzelnem Char
 
Werde ich gleich mal testen. Aber wie erklärt sich das? Da ich ContactStr schon als UTF8String deklariert habe, sollte Delphi doch automatisch eine Konvertierung durchführen oder nicht?

Edit: Es funktioniert tatsächlich :) Vielen Dank! Ne Erklärung wäre noch cool .. Hab mit dem $FE Zeichen noch andere Probleme. Weise ich z.b. einen UTF8String, der ein $FE Zeichen enthält einem "normalen", also ab D2009 Unicode String zu, so wird das Zeichen einfach in den altbekannten Kasten konvertiert. Gibts da einen ähnlichen Trick?

Uwe Raabe 22. Sep 2008 17:37

Re: D2009: Problem mit UTF8String und einzelnem Char
 
Also ich vermute folgendes (für exakte Antworten sollte man jemanden von CodeGear fragen):

Das Konstrukt "'1' + #$FE" wird vom Compiler bereits während des Compilierens zusammengefasst. D2009 interpretiert '1' als Unicode-String, daher wird das darauf folgende "#$FE" auch als Unicode-Zeichen interpretiert.

Ich muss aber zugeben, daß das Verhalten des Compilers hier nicht unbedingt einsichtig ist und eventuell sogar ein echter Bug vorliegt.

Dein zweites Problem kann ich hier nicht nachvollziehen. Ein Beispiel wäre gut.

Zacherl 22. Sep 2008 17:47

Re: D2009: Problem mit UTF8String und einzelnem Char
 
Denke mal das kann man schon als Bug abstempeln, da der Zielstring ja ganz klar als UTF8 deklariert wurde.

Ich versuche mal ein einfaches Beispiel für den zweiten Fehler zu finden. Poste ich gleich ..

Gruß Zacherl


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:30 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