AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Erläuterung was "native unicode string" ist?

Ein Thema von torud · begonnen am 7. Jul 2011 · letzter Beitrag vom 14. Jul 2011
Antwort Antwort
Seite 1 von 3  1 23   
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#1

Erläuterung was "native unicode string" ist?

  Alt 7. Jul 2011, 09:31
Delphi-Version: 7
Hallo Wissende,

ich habe ein Riesen-Problem. Ich ziehe mir aus einer XML-Datei Teamnamen. Die XML-Datei ist in UTF-8 formatiert. Zum Anzeigen im Programm benutze ich die TntControls. Da sieht das alles super aus. Nun sende ich diese Inhalte (WideStrings und TWideStringlist) via TCP-Protokoll an eine Empfangende Software, die mir die inhalte visualisiert.

Leider wird dabei aus dem gesendeten String: Widzew Łódź
Das hier: Widzew Łó

Es fehlen also Zeichen. Es kann nicht an der Schriftart liegen, da die Anbieter der Rendering-software auch einen Designer haben. Wenn ich dort den String reinkopiere, wird der Inhalt korrekt gerendert. Es muss also an der Übermittlung irgendwo haken.

Der Programmierer, den ich daraufhin angeschrieben habe, teilte mir folgendes mit:
"Please double check that the value passed to Tk5 has proper value.
It should be native unicode string, not UTF-8."

Ich bin jetzt natürlich etwas ratlos und würde mich über ein paar Ratschläge freuen.
Danke
Tom
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
8.278 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Erläuterung was "native unicode string" ist?

  Alt 7. Jul 2011, 09:43
Für den Zweck würde sich zwar eine neuere Delphiversion (2009+) als die bei dir angegebene Version Delphi 7 wegen voller Unicodeunterstützung besser eignen, aber nichtsdestotrotz sollten WideStrings auch in Delphi 7 bereits funktionieren, da sie vom Betriebssystem verwaltet werden.

WideStrings sind auch nicht UTF-8, sondern benutzen tatsächlich die 2 Byte pro Zeichen.

Kannst du vielleicht einmal exakt die Bytes posten wie du sie via TCP versendest? Und wie verschickst du diese?
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#3

AW: Erläuterung was "native unicode string" ist?

  Alt 7. Jul 2011, 09:59
Hallo Sebastian,

meine Angaben waren wohl nicht ganz korrekt.

Also die Strings aus dem XML visualisiere ich als WideStrings z.B. in einem TTntEdit
Das Sammeln der Daten geschieht über TWideStrinlists aus der Unit JclUnicode.

Dann übergebe ich die Liste an eine selbst geschriebene Komponente, die die Daten dann an ein ComObjekt (GSTK5Lib_TLB) übergibt. Das Ding connected sich zum Renderer. Der Fehler liegt wohl definitiv auf meiner Seite, nur weiss ich noch nicht genau wo. Ich könnte den Code der Komponente und das Sender der Daten hier Posten, aber die Komponente selbst hat 900 Zeilen Code.

Der Programmierer hat mir noch einen Link zu den Delphi-Fundamentals geschickt.

Hier aber mal die XML-Datei, aus der ich auslese.
Was mich eben auch verwirrt, ist der Umstand, dass die Sonderzeichen nicht grundsätzlich NICHT funktionieren, sondern es nur partiell zu Problemen kommt.
Angehängte Dateien
Dateityp: xml main_.xml (1,8 KB, 4x aufgerufen)
Danke
Tom

Geändert von torud ( 7. Jul 2011 um 10:06 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Daniela.S
Daniela.S

Registriert seit: 1. Mär 2008
Ort: Niederösterreich
224 Beiträge
 
Delphi XE4 Enterprise
 
#4

AW: Erläuterung was "native unicode string" ist?

  Alt 7. Jul 2011, 10:56
Unicode Zeichen im UTF-8 Format benötigen zwischen 1-4 Byte. Womöglich werden einige Bytes nicht mitgeschickt weil die Längenberechnung des Strings nicht stimmt. SizeOf(...) wäre hier ganz falsch.

UTF-16 braucht 2-4 Bytes, die Länge muss auch hier berechnet werden. Kann passieren, wird aber oft vernachlässigt. Ich nehme wohl an, dass er die Daten in diesem Format erwartet, denn es würde WideString entsprechen.

Dann gibt's noch UTF-32, das hat immer 4 Byte.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
8.278 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Erläuterung was "native unicode string" ist?

  Alt 7. Jul 2011, 11:40
Dann übergebe ich die Liste an eine selbst geschriebene Komponente, die die Daten dann an ein ComObjekt (GSTK5Lib_TLB) übergibt.
Dann ist genau das der entscheidende Code. Wie sehen die Deklaration und der Code an genau dieser Stelle aus (in der Objekt-TLB-Unit und dein Aufruf)?

Wenn du dort einen Haltepunkt setzt: Sind die Daten dort noch korrekt?
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#6

AW: Erläuterung was "native unicode string" ist?

  Alt 7. Jul 2011, 13:45
ich checks mal und melde mich dann wieder.
danke erstmal soweit.
Danke
Tom
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#7

AW: Erläuterung was "native unicode string" ist?

  Alt 8. Jul 2011, 12:20
Also ich habs jetzt mal überprüft.

Der Aufruf in der TLB_Unit sieht so aus:
procedure set_(const address: WideString; const attrName: WideString; value: OleVariant); safecall; Sprich ich übergebe den Namen des Objektes, dann den Typ (text) und dann den Inhalt des Objektes.

Der Aufruf dieser Procedure in meiner Komponente läuft so ab:
Delphi-Quellcode:
      //AUSSCHNITT
      //hier werden die texte aus der TWideStringlist einzeln übergeben
      for i := 0 to TextString.Count - 1 do
        loc_AkiTitle.set_(TextString.Names[i],'Text',TextString.Values[TextString.Names[i]]);

      //hier werden die logos aus der TWideStringlist einzeln übergeben
      for i := 0 to LogoString.Count - 1 do
        loc_AkiTitle.set_(LogoString.Names[i],'FileName',LogoString.Values[LogoString.Names[i]]);

      //hier werden zusätzliche Eigenschaften aus einer TWideStringlist einzeln übergeben
      for i := 0 to PropList.Count - 1 do
        loc_AkiTitle.set_(PropList.Items[i].str_Name,PropList.Items[i].str_Type,PropList.Items[i].str_Value);
TextString, LogoString sind vom Typ her TWideStringlist

Also sollte das doch so passen.
Oder?

Obwohl, ich sehe gerade, dass der eigentliche Inhalt vom Typ her value: OleVariant ist. Kann hier die Ursache für das Problem liegen?
Inhalte, die ich aus Edits hole, kommen ausschließlich von TTntEdits.
Die TWideStringlist habe ich mir fertig von der JCL geborgt.

Ich hoffe, dass das eventuell etwas hilft, mir bei meinem Problem zu helfen?
Danke
Tom
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
8.278 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Erläuterung was "native unicode string" ist?

  Alt 8. Jul 2011, 14:17
Hmm, testweise könntest du TextString.Values[TextString.Names[i]] usw. einmal in WideString Variablen zwischenspeichern bevor du es übergibst.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#9

AW: Erläuterung was "native unicode string" ist?

  Alt 9. Jul 2011, 08:30
Nur, um kurz mal sicher zu gehen.

Du meinst, ich soll mir die 2 übermittelten Werte jeweils in einer WideString-Variablen zwischenspeichern und dann der TLB-Funktion übergeben?

Wäre dabei was anders?
Oder soll ich mir das dann loggen?
Was ist der Hintergrund Deines Vorschlags?
Danke
Tom
  Mit Zitat antworten Zitat
FredlFesl

Registriert seit: 19. Apr 2011
293 Beiträge
 
Delphi 2009 Enterprise
 
#10

AW: Erläuterung was "native unicode string" ist?

  Alt 9. Jul 2011, 08:47
So nebenbei würde ich auch 'ValueFromIndex' verwenden. Tut zwar nix zur Sache, ist aber schneller und übersichtlicher.
Delphi-Quellcode:
for i := 0 to TextString.Count - 1 do
   loc_AkiTitle.set_(TextString.Names[i],'Text',TextString.ValueFromIndex[i]);
Das Bild hängt schief.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 13:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf