Unicode / UTF8 Problem

Für allgemeine Fragen zur Programmierung mit PureBasic.
MenschMarkus
Beiträge: 229
Registriert: 30.04.2009 21:21
Computerausstattung: i5-2300 (2.8 Ghz) Win10 -64bit / PB 5.73 LTS

Unicode / UTF8 Problem

Beitrag von MenschMarkus »

Hallo zusammen,

erst mal ein guten neues Jahr.

Ich habe da ein kleines Problem mit Sonderzeichen respektive mit der Darstellung bzw Übertragung von Unicode / UTF8 Zeichen.
Ich möchte aus einer Textdatei arabische Textzeichen einlesen. Trotz Einstellung auf UTF8 in der IDE und entsprechender Compilierung in Unicode sehe ich nur ????????.

Hier mal ein Auszug.

Code: Alles auswählen

source.s = "<NAME_ORIGINAL_SCRIPT>الجماعة التونسية المقاتلة</NAME_ORIGINAL_SCRIPT>"  ;Originaltext aus Unicode.txt mit Strg+C und Strg+V  erzeugt
Debug source.s    ; funktioniert schon im Debug Fenster nicht
tmp = OpenFile(0,"unicode.txt")
Debug tmp
strTMP.s + ReadString(0,#PB_UTF8)
Debug "strTMP.s = " + strTMP.s
CloseFile(0)
Es liegt nicht daran, das PB diese Zeichen nicht darstellen kann. Ein mit STRG+C kopierter String aus der Textdatei und mit STRG+V kopierter String in der PB IDE wird korrekt dargestellt.
Wie ich feststellen musste, kann der Debugger leider keine Unicode / UTF8 Zeichen darstellen (siehe obiges Beispiel). Leider.
Den String möchte ich in eine DB schreiben. Alle Versuche mit

Code: Alles auswählen

ReadString(0,#PB_UTF8)
bzw.

Code: Alles auswählen

BOM = ReadStringFormat(0) 
ReadString(0,BOM)
sind misslungen. Ich erhalte immer nur ??????????????????????

Wo ist da mein Denkfehler ?
Sollte das schon einmal besprochen worden sein, bitte ein Link auf den Beitrag.
Danke schon mal dafür.

menschmarkus
Wissen schadet nur dem, der es nicht hat !
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Unicode / UTF8 Problem

Beitrag von Danilo »

MenschMarkus hat geschrieben:

Code: Alles auswählen

source.s = "<NAME_ORIGINAL_SCRIPT>الجماعة التونسية المقاتلة</NAME_ORIGINAL_SCRIPT>"  ;Originaltext aus Unicode.txt mit Strg+C und Strg+V  erzeugt
Debug source.s    ; funktioniert schon im Debug Fenster nicht
Du hast es doch schon selbst beantwortet: Der Debugger kann es nicht. Warum nimmst Du dann weiter den Debugger zur Ausgabe?
Es kommt auch noch darauf an, ob der benutzte Font die entsprechenden UNICODE-Zeichen enthält.

Code: Alles auswählen

source.s = "<NAME_ORIGINAL_SCRIPT>الجماعة التونسية المقاتلة</NAME_ORIGINAL_SCRIPT>"  ;Originaltext aus Unicode.txt mit Strg+C und Strg+V  erzeugt
Debug source.s    ; funktioniert schon im Debug Fenster nicht

MessageRequester("Info",source) ; das funktioniert
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
HeX0R
Beiträge: 3070
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:

Re: Unicode / UTF8 Problem

Beitrag von HeX0R »

Der eigenständige Debugger sollte es auch korrekt anzeigen können.
Benutzeravatar
_sivizius
Beiträge: 98
Registriert: 23.10.2013 15:21

Re: Unicode / UTF8 Problem

Beitrag von _sivizius »

auch wenn man Unicode eingestellt hat werden die Strings als ASCII gespeichert. Das kann man sich einfach anschauen, wenn man eine Assemblerausgabe erzeugt. bei der Ausführung wird daraus erst Unicode im RAM. Du könntest es also mit:

Code: Alles auswählen

DataSection
  UnicodeString:
  Data.u char0
  Data.u char1
  Data.u char2
  ...
  Data.u 0
EndDataSection
mal probieren.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8837
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Unicode / UTF8 Problem

Beitrag von NicTheQuick »

_sivizius hat geschrieben:auch wenn man Unicode eingestellt hat werden die Strings als ASCII gespeichert.
Das stimmt nicht, wenn man seinen Code mit UTF-8 speichert. Und das wurde hier auch schon gesagt.
MenschMarkus
Beiträge: 229
Registriert: 30.04.2009 21:21
Computerausstattung: i5-2300 (2.8 Ghz) Win10 -64bit / PB 5.73 LTS

Re: Unicode / UTF8 Problem

Beitrag von MenschMarkus »

Danke für Eure posts.

Es war erst mal sehr hilfreich für mich zu sehen, ob ich den String überhaupt korrekt aus der Datei auslesen konnte.
Dank MessageRequester konnte ich das jetzt positive prüfen. :allright:

Jetzt muss ich zusehen ob dieser String auch in meine Datenbank korrekt übertragen und wieder ausgelesen werden kann.
Da es keine Standard Datenbank ist muss ich den Hersteller anfragen.

Danke nochmals für Eure Unterstützung.
Wissen schadet nur dem, der es nicht hat !
Benutzeravatar
_sivizius
Beiträge: 98
Registriert: 23.10.2013 15:21

Re: Unicode / UTF8 Problem

Beitrag von _sivizius »

NicTheQuick hat geschrieben:
_sivizius hat geschrieben:auch wenn man Unicode eingestellt hat werden die Strings als ASCII gespeichert.
Das stimmt nicht, wenn man seinen Code mit UTF-8 speichert. Und das wurde hier auch schon gesagt.
es geht ja auch nicht um den code, sondern um die asm-ausgabe
MenschMarkus
Beiträge: 229
Registriert: 30.04.2009 21:21
Computerausstattung: i5-2300 (2.8 Ghz) Win10 -64bit / PB 5.73 LTS

Re: Unicode / UTF8 Problem

Beitrag von MenschMarkus »

Also, mit SQLITE funktioniert schreiben und lesen. War auch nicht anders zu erwarten.
Soweit ich weiß kann man bei der SQLITE einen einzelnen Satz einer Tabelle nicht sperren, was eine Mehrbenutzerapplikation wohl unmöglich macht ohne das Risiko eines Chaos einzugehen.

ODER ?
Wissen schadet nur dem, der es nicht hat !
Benutzeravatar
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Unicode / UTF8 Problem

Beitrag von Kiffi »

@MenschMarkus: SQLite ist eigentlich eher für Einzelanwender-Applikationen gedacht.
Kommt darauf an, wie viele Leute *gleichzeitig* auf die Datenbank zugreifen.

Einen einzelnen Datensatz könnte man indirekt sperren, indem man beispielsweise eine
zusätzliche Spalte 'Lock' (Typ: Boolean; Standardwert: False) in die Tabelle einfügt.
Bearbeitet jemand einen Datensatz, so setzt Du vorher den Wert dieses Datensatzes auf
True. Ist die Bearbeitung abgeschlossen, so setzt Du den Wert auf wieder False.

Aber wie geschrieben: Wenn viele Leute mit der DB arbeiten wollen, bist Du mit einem
DB-Server (wie SQL Server, mySQL, PostgreSQL, ö. ä.) besser beraten.

Grüße ... Kiffi
a²+b²=mc²
MenschMarkus
Beiträge: 229
Registriert: 30.04.2009 21:21
Computerausstattung: i5-2300 (2.8 Ghz) Win10 -64bit / PB 5.73 LTS

Re: Unicode / UTF8 Problem

Beitrag von MenschMarkus »

@Kiffi

Danke für den Vorschlag Kiffi.
Ich hatte mich ursprünglich für SQLite entschieden, da es keinerlei Installation im System benötigt und auch nur eine Person damit arbeiten sollte.

Soweit ich mich entsinnen kann benötigen die von Dir angesprochenen DB's eine Installation, sei es eine eigenständige oder über ODBC oder so.
Das ist aus meiner Sicht ein Risiko für Fehlfunktionen die in Abhängigkeit von Systemkonfiguration bla bla ...

Ich hatte mich für eine Standalone DB entschieden (Apollo) in der die DB Engine in der DLL mit eingebaut ist. Also nur eine DLL mitliefern und geht. Die kostet zwar etwas aber sie ist schnell und bietet alle Features der o.g. DB und einige FastTextSearch features mehr. Einmal Lizenz gekauft kann ich Sie in beliebig vielen Programmen einsetzen.

Leider bekomme ich, sobald ich Unicode in PB einschalte keine Daten mehr in die DB. Und noch einige Merkwürdigkeitn mehr, aber das ist ein anderes Thema was nur hierher gehört wenn jemand das gleiche Problem mit der Apollo DB unter PB hat.

menschmarkus
Wissen schadet nur dem, der es nicht hat !
Antworten