Sonderzeichen im Stringgadet

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Sonderzeichen im Stringgadet

Beitrag 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
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Sonderzeichen im Stringgadet

Beitrag von ts-soft »

Schalt mal zwischen ASCII und UTF-8 um (im Datei-Menü der IDE).
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Sonderzeichen im Stringgadet

Beitrag 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 ?
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Sonderzeichen im Stringgadet

Beitrag 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
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Sonderzeichen im Stringgadet

Beitrag 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
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Sonderzeichen im Stringgadet

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Sonderzeichen im Stringgadet

Beitrag 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
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Sonderzeichen im Stringgadet

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Sonderzeichen im Stringgadet

Beitrag von ts-soft »

SQLite verwendet normallerweise immer UTF-8!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Sonderzeichen im Stringgadet

Beitrag 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
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Antworten