Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Umwandlung von AnsiString und AnsiChar Werten (https://www.delphipraxis.net/162821-umwandlung-von-ansistring-und-ansichar-werten.html)

Andidreas 6. Sep 2011 15:13

Delphi-Version: XE

Umwandlung von AnsiString und AnsiChar Werten
 
hallo zusammen...

ich hab gerade mit einer meiner komponenten ein problem, konkret geht es darum das mir deutsch umlaute (äüöß) nicht korrekt im dbgrid angezeigt werden...
die stelle an der der fehler passiert habe ich in der komponente gefunden...
da die komponente open source ist versuch ich gerade die stelle anzupassen...

anbei der originale source code:
Delphi-Quellcode:
var
pData: PAnsiChar;

...

pData := pAnsiChar(SQLite3_Column_text(theStatement, i)); //SQLite3_Column_text liefert als Return PAnsiChar
wenn ich den source so ausführe erhalte ich z.b. als ergebnis "Test abc"

tu ich über den folgendne source die daten umkonvertieren erhalte ich z.b. in pData nur noch ein "T" versteh aber im moment nicht wieso und wie ich den fehler umgehen kann

Delphi-Quellcode:
var
pData: PAnsiChar;
sData: String;

...

sData := pAnsiChar(SQLite3_Column_text(theStatement, i));
sData := UTF8ToAnsi(sData)
pData := pAnsiChar(sData);

Bernhard Geyer 6. Sep 2011 15:14

AW: Umwandlung von AnsiString und AnsiChar Werten
 
SQLite kann doch Unicode. Könnte es sein das nur deine entsprechende Stelle (fehlerhaft) Ansistrings zurückliefert und die anderen Stellen (korrekt) einen PWideChar?

Andidreas 6. Sep 2011 15:19

AW: Umwandlung von AnsiString und AnsiChar Werten
 
ja sqlite kann unicode...
ich mache meinen zugriff über die aducom sqlite komponente... und wenn ich die query daten direkt in einem dbgrid anzeigen lasse, werden mir eben umlaute falsch angezeigt, und meiner meinung nach liegt der fehler genau an dieser einen stelle im source, aber ich kriegs nicht gebacken die daten umzukonvertieren und korrekt ins dataset zu schmeißen :-/

p80286 6. Sep 2011 15:34

AW: Umwandlung von AnsiString und AnsiChar Werten
 
Zitat:

Zitat von Andidreas (Beitrag 1122120)
konkret geht es darum das mir deutsch umlaute (äüöß) nicht korrekt im dbgrid angezeigt werden...

Könntest Du "nicht korrekt" einmal näher definieren?
Ist Ä mit ä vertauscht?
Fehlt das ß?
Gibt es Kästchen statt Buchstaben?
was ist es denn?

Gruß
K-H

Andidreas 6. Sep 2011 15:46

AW: Umwandlung von AnsiString und AnsiChar Werten
 
nicht korrekt heißt das mir die umlaute als "hyroglyphen" angezeigt werden z.b. wird beim "ä" ein großes a + enter zeichen ausgegeben und über das utf8toansi kann ich mir das wieder als ä anzeigen lassen

Bernhard Geyer 6. Sep 2011 15:48

AW: Umwandlung von AnsiString und AnsiChar Werten
 
Zitat:

Zitat von Andidreas (Beitrag 1122138)
nicht korrekt heißt das mir die umlaute als "hyroglyphen" angezeigt werden z.b. wird beim "ä" ein großes a + enter zeichen ausgegeben und über das utf8toansi kann ich mir das wieder als ä anzeigen lassen

Wie sind die Hex-Werte dieser Zeichen?

Andidreas 6. Sep 2011 15:53

AW: Umwandlung von AnsiString und AnsiChar Werten
 
so hier jetzt mal ein konkretes bsp.

im dbgrid wird mir
"Test äöüß"

anstatt
"Test äöüß"

angezeigt

über utf8toansi kann ich mir den wert aber wieder zurück konvertieren damit mir "Test äöüß" angezeigt wird...

Andidreas 6. Sep 2011 17:14

AW: Umwandlung von AnsiString und AnsiChar Werten
 
dank der hilfe eines kollegens funktioniert die konvertierung jetzt :)

so gehts:
Delphi-Quellcode:
var
pData: PAnsiChar;
sData: String;
sAnsiData: AnsiString;

...

sData := SQLite3_Column_text(theStatement, i);
sData := UTF8ToAnsi(sData);
sAnsiData := AnsiString(sData);
pData := PAnsiChar(PAnsiString(sAnsiData));

himitsu 6. Sep 2011 17:30

AW: Umwandlung von AnsiString und AnsiChar Werten
 
Du castest einen AnsiString in einen PAnsiString? :shock:
  • AnsiString = Zeiger auf seine Daten (Chars und Zusatzinfos)
  • PAnsiString = Zeiger auf den Zeiger auf seine Daten/Chars
  • PAnsiChar = Zeiger auf Char/CharArray

Was hat SQLite3_Column_text für einen Result-Type?
Wie ist der kodiert? (ANSI, UTF-8 oder ANSI)

Und welches Format braucht pData?
PWideChar, PAnsiChar+ANSI oder PAnsiChar+UTF-8



Delphi-Quellcode:
sAnsiData := UTF8ToAnsi(SQLite3_Column_text(theStatement, i));
pData := PAnsiChar(sAnsiData);

Andidreas 6. Sep 2011 17:33

AW: Umwandlung von AnsiString und AnsiChar Werten
 
ja da mir keine andere lösung eingefallen ist...

der rückgabe wert von SQLite3_Column_text steht im source meines ersten beitrages...
der typ für pdata steht in den deklarationen ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:49 Uhr.
Seite 1 von 2  1 2      

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