Seite 1 von 2
Sonderzeichen im Stringgadet
Verfasst: 25.09.2013 14:55
von Velindos
Hallo Leute,
wenn ich Daten aus der Datenbank hole (STICHWORT$= GetDatabaseString(DB,1)), dann werden mir die Zeichen "€,@" als "?" im Stringgadget und Listicon angezeigt.
Weiss jemand warum!?
Gruss ... Velindos
Re: Sonderzeichen im Stringgadet
Verfasst: 25.09.2013 15:31
von ts-soft
Schalt mal zwischen ASCII und UTF-8 um (im Datei-Menü der IDE).
Re: Sonderzeichen im Stringgadet
Verfasst: 25.09.2013 15:39
von STARGÅTE
Wenn selbst das @ (was ja reines Ascii ist) als ? angezeigt wird, dann liegt wohl er ein encoding problem in der Datenbank vor.
In welchem Format liegen denn die Strings in der Datenbank vor? Dort gibt es ja hunterte.
Hast du STICHWORT$ schon mal im ShowMemoryViewer() angeguckt, welche Numbern dadrin stehen.
Vielleicht ist es auch ein Problem des Systems? Ascii/Unicode exe ?
Re: Sonderzeichen im Stringgadet
Verfasst: 26.09.2013 06:59
von Velindos
Hallo,
danke für die Tips.
Tip1: Umstellen auf UTF8 ergibt Chaos im Code
Programm lässt sich nicht mehr starten!
Tip2: Abfrage des Buffer, kann ich nicht!
Habe Stichwort$ Variable und keine Memory
Nun habe die Sache eingegrenzt in folgende Schritte:
Schreiben in DB= Notiz @ ³ ² €
Lesen von DB= Notiz @ ³ ² ?
Anscheinend übernimmt die Datenbank das Zeichen "€" nicht! Die anderen Zeichen werden übernommen!
Gruss ... Velindos
Re: Sonderzeichen im Stringgadet
Verfasst: 26.09.2013 08:58
von Velindos
Hallo Leute,
habe noch ein Problem. Folgende Sonderzeichen stellt PB im Editorgadget dar:
☑Kästchen mit Hacken
✎Bleistift
✔Häckchen
☒Kästchen mit X
Leeres Kästchen
Nun wie bekomme ich diese im Webgadget dargestellt, keine Ahnung?
Gruss ... Velindos
Re: Sonderzeichen im Stringgadet
Verfasst: 26.09.2013 10:35
von STARGÅTE
Klar kann der Editor diese Zeichen darstellen, allerdinst musst du
vorher die IDE/file auf UTF-8 umstellen und einen unicodefähigen Zeichensatz nutzen.
Velindos hat geschrieben:Anscheinend übernimmt die Datenbank das Zeichen "€" nicht! Die anderen Zeichen werden übernommen!
Welchen Zeichensatz hast du denn bei der Erstellung deiner Datenbank benutzt?
Es wäre ganz gut, wenn du einen reduzierten Code deines Problems zeigen kannst.
Re: Sonderzeichen im Stringgadet
Verfasst: 26.09.2013 11:26
von Velindos
Hallo Stargate,
die Datenbank wird wie folgt angelegt:
Code: Alles auswählen
If OpenDatabase(DB, DatabaseFile$, "", "", #PB_Database_SQLite)
DatabaseUpdate(DB, "Create Table Velindos (ID INTEGER PRIMARY KEY AUTOINCREMENT, Stichwort TEXT,Notiz TEXT)")
EndIf
Der eingestellte Zeichensatz in Purebasic ist "Calibri", andere Einstellung kenne ich nicht.
Habe die Sache auf UTF8 kopiert und getestet, hat sich nichts verändert. Was ich nicht verstehe, dass die Sonderzeichen aus dem Editorgadget korrekt gespeichert und angezeigt werden, hingegen die Sonderzeichen aus dem Stringgadget das "€"-Zeichen nicht darstellen! Ist doch die selbe Datenbank bzw.Tabelle.
Gruss ... Velindos
__________________________________________________
Code-Tags hinzugefügt
26.09.2013
RSBasic
Re: Sonderzeichen im Stringgadet
Verfasst: 26.09.2013 12:57
von STARGÅTE
Mit Zeichensatz meine ich: ascii_general_ci, latin1_german1_ci, utf8_general_ci usw.
Also wie die Daten gespeichert werden, und wie Texte zB sortiert werden aäbcdeèéêfg... oder abcdefgäèéê
Nun weiß ich immer noch nicht, was du bei der Datenbank eingestellt hast (Set character set) und ich bin auch kein SQL experte, aber ich vermute in der Datei DatabaseFile$, wird das Eurozeichen als UTF8-Codierung gespeichert, also als: "â‚" wenn man es als ascii ließt.
Was ich nun festgestellt habe ist, dass dieser Code mit €-Zeichen nur mit IDE-utf8 und EXE-Unicode läuft:
Code: Alles auswählen
UseSQLiteDatabase()
OpenWindow(0, 0, 0, 300, 300, "", #PB_Window_SystemMenu)
StringGadget(1, 10, 10, 200, 20, "")
EditorGadget(2, 10, 40, 200, 100)
Define String.s
Define DatabaseFile.s = GetTemporaryDirectory()+"Database.txt"
CreateFile(0, DatabaseFile) : CloseFile(0)
OpenDatabase(0, DatabaseFile, "", "")
DatabaseUpdate(0, "CREATE TABLE test (name TEXT latin1)")
DatabaseUpdate(0, "INSERT INTO test (name) VALUES ('@€')")
If DatabaseQuery(0, "SELECT * FROM test")
While NextDatabaseRow(0)
String = GetDatabaseString(0, 0)
Debug String
SetGadgetText(1, String)
SetGadgetText(2, String)
Wend
FinishDatabaseQuery(0)
EndIf
CloseDatabase(0)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Das €-Zeichen ist nunmal kein Teil des ASCII-Bereichs, und wird nur deshalb in ASCII als 128 angezeigt, weil der richtige Zeichensatz verwendet wird (latin german1 zB.).
Ansonsten ist das €-Zeichen 8364 also außerhalb der ASCII-Range.
Daher muss UTF8 in der PB Datei und Unicode in der EXE eingestellt werden, oder halt der Zeichensatz der Datenbank angepasst werden.
Re: Sonderzeichen im Stringgadet
Verfasst: 26.09.2013 13:12
von ts-soft
SQLite verwendet normallerweise immer UTF-8!
Re: Sonderzeichen im Stringgadet
Verfasst: 26.09.2013 14:47
von Velindos
Hallo Stargate,
besten Dank für deine Hilfe. Die Sache läuft wenn ich meinen Compiler auf deine Vorgabe einstelle. Besten Dank für die Unterstützung, das Forum ist einfach SPITZE!
Gruss ... Velindos