![]() |
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:
wenn ich den source so ausführe erhalte ich z.b. als ergebnis "Test abc"
var
pData: PAnsiChar; ... pData := pAnsiChar(SQLite3_Column_text(theStatement, i)); //SQLite3_Column_text liefert als Return PAnsiChar 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); |
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?
|
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 :-/ |
AW: Umwandlung von AnsiString und AnsiChar Werten
Zitat:
Ist Ä mit ä vertauscht? Fehlt das ß? Gibt es Kästchen statt Buchstaben? was ist es denn? Gruß K-H |
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
|
AW: Umwandlung von AnsiString und AnsiChar Werten
Zitat:
|
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... |
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)); |
AW: Umwandlung von AnsiString und AnsiChar Werten
Du castest einen AnsiString in einen PAnsiString? :shock:
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); |
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 ;-) |
AW: Umwandlung von AnsiString und AnsiChar Werten
OK, dann sollte mein Code funktionieren.
sAnsiData darf nur keine lokale Variable sein ... dieser String muß so lange "überleben", wie Zeiger darauf (PAnsiChar) irgendwo verwendet werden. |
AW: Umwandlung von AnsiString und AnsiChar Werten
@himitsu
welchen code meinst du? ja aber wenn der ansi string nur in der funktion benutzt wird kann er doch auch lokal definiert sein?! |
AW: Umwandlung von AnsiString und AnsiChar Werten
siehe #9?
Jupp, wenn er nur darin verwendet wird, dann auch lokal, wobei man da eventuell auch die PAnsiChar-Konstante (pData) weglassen und direkt den PAnsiChar(sAnsiData) verwenden könnte. oder einfach nur PAnsiChar(sData) genannt |
AW: Umwandlung von AnsiString und AnsiChar Werten
sorry den habe ich übersehen...
aber worin besteht da genau der unterschied? ausser das ich ein paar codezeilen mehr habe die "unnütz" sind... kann ich durch meine variante probleme bekommen? naja die pData Variable hab ich drin gelassen da ich in der komponenten nicht zuviel ändern wollte ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:49 Uhr. |
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-2025 by Thomas Breitkreuz