Umlaute

Anfängerfragen zum Programmieren mit PureBasic.
walter741
Beiträge: 68
Registriert: 26.10.2008 09:21
Computerausstattung: P4, 2600, 1,5GB Ram, XP SP3
Wohnort: Wien

Umlaute

Beitrag von walter741 »

Hallo an alle

Ja, das ist heute schon meine zweite Frage.
Aber ich verzweifle.

Ich übertrage Texte von einer CSV-Datei in eine SQLite DB.
Wenn ich die Sqlite DB auslese werden zwei Kryptische Zeichen
statt der Umlaute geschrieben.

Mit HexEditor bewaffnet habe ich folgendes festgestellt.

1.Die CSV Datei beinhaltet normale Umlaute. Ein Byte für einen Umlaut.
2.In der SQL-DB wurden die Umlaute bereits mit zwei Bytes gespeichert.
3.Lese ich aus der SQLiteDB, so erhalte ich ebenfalls diese 2 Byte.

Ich vermute, das SQLite die Daten in UTF-8 abspeichert, da sich die Anzahl der Bytes pro Zeichen ändert. Ein Byte für normale Buchstaben,
und zwei Byte für Umlaute.

Als Notlösung suche ich in den ausgelesenen Strings der SQL DB
nach diesen beiden SonderBytes und ersätze sie durch
passende Umlaute:

Code: Alles auswählen

       Text1.s=GetDatabaseString(DB, 0)
           Text1=ReplaceString(Text1,Chr(0195)+Chr(0164), "ä")
           Text1=ReplaceString(Text1,Chr(0195)+Chr(0182), "ö")
           Text1=ReplaceString(Text1,Chr(0195)+Chr(0188), "ü")
           Text1=ReplaceString(Text1,Chr(0195)+Chr(0132), "Ä")
           Text1=ReplaceString(Text1,Chr(0195)+Chr(0150), "Ö")
           Text1=ReplaceString(Text1,Chr(0195)+Chr(0156), "Ü")
           Text1=ReplaceString(Text1,Chr(0195)+Chr(0159), "ß")
       SetGadgetText(#String_Zeilennummer , Text1)

Ja, es funktioniert, aber es ist doch nicht richtig?
Was sagen die Profis hierzu.
Ich habe nach 5 Std Suche aufgegeben und Frage nun Euch.

Wenn möglich, Bitte eine Antwort für DAUs. Mein Kopf platzt gleich.

Grüsse
Walter
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

Beitrag von ts-soft »

Es ist normal, das die Strings im UTF-8 Format gespeichert werden, darum
brauchste Dich doch normallerweise garnicht kümmern. Du erhälst den
String von der Datenbank doch in dem Format, das in den Compileroptionen
aktiviert ist, also ASCII oder UNICODE.

Ansonsten gibts noch PeekS, PokeS um da was umzuwandeln.
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
walter741
Beiträge: 68
Registriert: 26.10.2008 09:21
Computerausstattung: P4, 2600, 1,5GB Ram, XP SP3
Wohnort: Wien

Beitrag von walter741 »

ts-soft

Habe jetzt den Hacken bei "Unicode Executable erstellen" gesetzt.

Jetzt funktioniert es richtig.

Nette Antwort auf eine blöde Frage!

for a= 1 to 1000
Debug "Danke"
Next a

Walter
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

Beitrag von ts-soft »

GetDatabaseString() sollte aber auch im ASCII-Modus Umlaute korrekt
wiedergeben, oder ist das nicht der Fall?
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
php-freak
Beiträge: 536
Registriert: 07.02.2009 18:08

Beitrag von php-freak »

walter741 hat geschrieben:for a= 1 to 1000
Debug "Danke"
Next a
^^Das find ich cool!
PureBasic 4.30 (x86)
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

tausend dank eben! :mrgreen:
Win11 x64 | PB 6.20
walter741
Beiträge: 68
Registriert: 26.10.2008 09:21
Computerausstattung: P4, 2600, 1,5GB Ram, XP SP3
Wohnort: Wien

Beitrag von walter741 »

Hallo

Den Hacken bei "Unicode Executable erstellen" hatte ich gesetzt,
aber beim falschen File.
Habe mehrere Dateien offen, und man kann die CompilerOptionen
für jede Datei separat verstellen.(auch bei den zB IncludeDateien)
Je nach dem welche Datei ich gerade im Vordergrund habe, ändere ich
auch diese CompielerOptionen. Ist etwas verwirrend.

Nach einigen Änderungen mach ich es jetzt so:

CSV-Datei einlesen mit :

Code: Alles auswählen

 EineZeile.s=ReadString(1,#PB_Ascii  )
Diesen String zerlegen und in SQLite schreiben.
In der DB ist nun der Text im UTF-8 Format. => 2Zeichen für ö oder ä

Den Hacken bei "Unicode Executable erstellen" setzen.
Aber auch beim richtigen File (Der auch gestartet wird)
Beim auslesen der SQLite DB werden die Umlaute richtig angezeigt.

lg Walter
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

[ot]
Weiss eigentlich einer, warum 90% der Internetuser "Hacken" anstatt Haken schreiben?
Ist dieses dämliche Wort wirklich so abwegig?

Mich zumindest schüttelt es immer, wenn ich das lese.
[/ot]
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

[ot]
ja, mir fällt es auch viel zu oft auf, ich finde es grausig.
zumal es ein umgangsprachlicher Ausdruck für "Ferse" ist.

vielleicht liegen solche Häufungen, auch von anderen merkwürdigen
Schreibweisen, einfach daran, dass man vor der Ära des Internet von
den meisten Leuten einfach nichts schriftliches zu sehen bekam.
[/ot]
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

ist heute Schrägschreibetag?
Win11 x64 | PB 6.20
Antworten