Unicode-Unterstützung?

Anfängerfragen zum Programmieren mit PureBasic.
Tanaghra
Beiträge: 28
Registriert: 13.05.2017 01:44

Unicode-Unterstützung?

Beitrag von Tanaghra »

Hallo,

eine der Errungenschaften der Purebasic-Version 5.30 sollte ja eine "vollständig Unicode-kompatible IDE" sein (Zitat von der PureBasic-Seite, "Neuigkeiten" zur genannten Version). Zunehmend frage ich mich aber, was damit konkret gemeint ist; auf jeden Fall ist damit nicht dieselbe Unicode-Unterstützung gemeint, wie sie beispielsweise bei C# gewährleistet ist. Denn was z.B. nicht funktioniert ist folgender Kode:

Code: Alles auswählen

EnableExplicit

#Vz_Bp="D:\Programmierung\Basic-Programme\PureBasic\"
IncludeFile #Vz_Bp+"Paketmaße.pbf"
Hier wirft der Compiler die Fehlermeldung aus:
Zeile 2: Datei nicht gefunden
D:\Programmierung\Basic-Programme\PureBasic\Paketmße.pbf
Das Problem ist hier das "ß" im Dateinamen "Paketmaße.pbf". Benennt man die Datei in "Paketmasse.pbf" um (und ändert den Kode in IncludeFile #Vz_Bp+"Paketmasse.pbf"), wird sie anstandslos gefunden.

Selbstverständlich habe ich in in den Einstellungen unter Compiler/Standards/Textkodierung des Quellkodes von "Reiner Text" auf "UTF-8" umgestellt.

Ich weiß natürlich, daß die Namen von Variablen, Konstanten, Sprungmarken etc. keine deutschen Umlaute enthalten dürfen. Ich dachte aber, daß mit "Unicode-Unterstützung" zumindest gemeint ist, daß die Werte von String-Variablen und -Konstanten Unicode enthalten dürfen (was soll 'Unicode-Unterstützung der IDE' sonst bedeuten?).

Interessant ist noch folgendes. Erstellt man ein Projekt und fügt diesem die Datei mit dem Quellkode und die mit dem Kode fürs Fenster (also die mit dem Form-Designer erstellte PBF-Datei) ins Projekt ein, meckert der Compiler trotz "ß" im Dateinamen nicht mehr rum, sondern findet sie problemlos. Nur will man aber nicht immer wegen nur zwei Dateien ein Projekt erstellen müssen.

Irgendjemand eine Idee, wie man PureBasic (ich habe die neueste Version 5.60) beibringen kann, auch ohne Projekteinbindung Unicode-kodierte Dateinamen zu akzeptieren?

Vielen Dank
Windows 7 x64; geposteter Kode bezieht sich (sofern nicht anders angegeben) immer auf das aktuellste PureBasic 64-Bit

Erst wenn man es seiner Schwiegermutter erklären kann, hat man es verstanden.
As gsündeste is oiwei guad essn und dringa und ned grang wern.
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Unicode-Unterstützung?

Beitrag von GPI »

Stell mal unter File > FileFormat das Format um, speichern und probiers dann nochmal.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Tanaghra
Beiträge: 28
Registriert: 13.05.2017 01:44

Re: Unicode-Unterstützung?

Beitrag von Tanaghra »

Vielen Dank, GPI, hat funktioniert.

Welcher Unterschied besteht zwischen der Einstellung über das Menü (Datei/Datei-Format > Codierung: utf8) und die Festlegung über die Einstellungen (Compiler/Standards/Textkodierung des Quellkodes > UTF-8)? Letztere scheint ja ebenfalls für jede Datei separat festgelegt werden zu können.

Danke
Windows 7 x64; geposteter Kode bezieht sich (sofern nicht anders angegeben) immer auf das aktuellste PureBasic 64-Bit

Erst wenn man es seiner Schwiegermutter erklären kann, hat man es verstanden.
As gsündeste is oiwei guad essn und dringa und ned grang wern.
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: Unicode-Unterstützung?

Beitrag von ts-soft »

Tanaghra hat geschrieben:Letztere scheint ja ebenfalls für jede Datei separat festgelegt werden zu können.
So sieht es aus, das eine ist die Vorgabe für neue Dateien, das andere ist das festgelegte Format!
Also, ältere Dateien im falschen Format müssen, so wie Du es bereits getan hast, konvertiert werden.
(PS: Reiner's Text macht nicht mehr viel Sinn! :) )
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: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Unicode-Unterstützung?

Beitrag von STARGÅTE »

Was bei mir dann aber trotzdem nicht geht sind zeichen außerhalb des 255er-Raums:

Code: Alles auswählen

EnableExplicit

IncludeFile "C:\Users\Martin Guttmann\Desktop\λφψϑ.pb"
---------------------------
PureBasic
---------------------------
Zeile 3: Datei nicht gefunden (C:\Users\Martin Guttmann\Desktop\????.pb).
---------------------------
OK
---------------------------
PS: ReadFile kann unterdessen diese Datei auch problemlos öffnen, aber der Compiler scheinbar nicht.
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
Tanaghra
Beiträge: 28
Registriert: 13.05.2017 01:44

Re: Unicode-Unterstützung?

Beitrag von Tanaghra »

Du hast recht, STARGÅTE, es gibt keine volle Unterstützung von Unicode-Dateinamen; auch die Einstellung Utf-8 unter Datei/Datei-Format > Codierung ändert daran nichts. Ich habe nicht griechische, sondern kyrillische Buchstaben ausprobiert (die liegen im x0400er Unicode-Bereich).

Code: Alles auswählen

EnableExplicit

#Vz_Bp="D:\Programmierung\Basic-Programme\PureBasic\"
IncludeFile #Vz_Bp+"Размеры пакетов.pbf"
Ist wie "Paketmaße.pbf", nur auf Russisch, und die gleiche Fehlermeldung wie bei Dir:

Code: Alles auswählen

Zeile 4: Datei nicht gefunden
(D:\Programmierung\Basic-Programme\PureBasic\???????
???????.pbf).
Ich habe einen Verdacht: Windows 7 x64 (aber wohl auch neuere Versionen) verwendet UTF-16LE für seine Dateinamen, während es für die PureBasic-IDE nur die Option UTF-8 gibt. Ich verstehe sowieso nicht, weshalb PureBasic einen solchen Narren an UTF-8 gefressen hat (Speicherplatz ist ja heutzutage wirklich nicht mehr das Problem); die meisten Texteditoren verwenden, wenn Unicode-Kodierung eingestellt ist, ganz natürlich UTF-16.
Windows 7 x64; geposteter Kode bezieht sich (sofern nicht anders angegeben) immer auf das aktuellste PureBasic 64-Bit

Erst wenn man es seiner Schwiegermutter erklären kann, hat man es verstanden.
As gsündeste is oiwei guad essn und dringa und ned grang wern.
Benutzeravatar
mhs
Beiträge: 224
Registriert: 11.01.2009 16:30
Wohnort: Graben
Kontaktdaten:

Re: Unicode-Unterstützung?

Beitrag von mhs »

Tanaghra hat geschrieben:Ich verstehe sowieso nicht, weshalb PureBasic einen solchen Narren an UTF-8 gefressen hat (Speicherplatz ist ja heutzutage wirklich nicht mehr das Problem); die meisten Texteditoren verwenden, wenn Unicode-Kodierung eingestellt ist, ganz natürlich UTF-16.
Der Standard für Unicode bei Textdateien, etc ist UTF-8, hier macht PureBasic alles richtig.
Michael Hack

Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Unicode-Unterstützung?

Beitrag von GPI »

Tanaghra hat geschrieben:Ich verstehe sowieso nicht, weshalb PureBasic einen solchen Narren an UTF-8 gefressen hat (Speicherplatz ist ja heutzutage wirklich nicht mehr das Problem); die meisten Texteditoren verwenden, wenn Unicode-Kodierung eingestellt ist, ganz natürlich UTF-16.
UTF8 hat einen gewaltigen Vorteil: JEDES Program, das ASCII einlesen kann, kann auch mit UTF8 Dateien umgehen. Mit UTF-16 wirds inkompatibel zu allen.

Ich denke eher, das es ein Bug in Compiler ist, wenn der Compiler nicht mit Zeichen über 255 klar kommt, aber die PB-Programme selbst damit keinerlei Probleme haben.

Der Fehler ist vermutlich bisher nicht aufgetreten, weil Englisch weltweit die Programmiersprache schlecht hin ist und sich das Problem dort einfach nicht stellt.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Tanaghra
Beiträge: 28
Registriert: 13.05.2017 01:44

Re: Unicode-Unterstützung?

Beitrag von Tanaghra »

Der Standard für Unicode bei Textdateien, etc ist UTF-8, hier macht PureBasic alles richtig.
Im Wikipedia-Artikel zu Unicode steht:
… am weitesten verbreitet sind zum einen UTF-16, das sich als interne Zeichendarstellung einiger Betriebssysteme (Windows,[41] OS X) und Softwareentwicklungs-Frameworks (Java,[42] .NET[43]) etabliert hat, zum anderen UTF-8, das ebenfalls in Betriebssystemen (GNU/Linux, Unix) sowie in verschiedenen Internetdiensten (E-Mail, WWW) eine große Rolle spielt.
Also ich verstehe das so, daß auf Betriebssystemebene bei Windows UTF-16 verwendet wird, und ich finde schon, daß eine allgemeine (also nicht auf das Internet oder sonstige Spezialbereiche spezialisierte) Programmiersprache sich auch an den Betriebssystem-Standards orientieren sollte -- zumindest in der Windows-Version von PureBasic.

Auch der Windows-Editor und UltraEdit, einer der besten und verbreitetsten kommerziellen Editoren, benutzt, wenn man auf Unicode umstellt und keine zusätzlichen Spezifikationen vornimmt, standardmäßig UTF-16. Man kann dann noch "von Hand" auf UTF-8 umstellen, wenn man das will (aber wer will das schon).
UTF8 hat einen gewaltigen Vorteil: JEDES Program, das ASCII einlesen kann, kann auch mit UTF8 Dateien umgehen. Mit UTF-16 wirds inkompatibel zu allen.
Kann tatsächlich der Windows 95-Editor eine in UTF-8 kodierte Datei mit chinesischen Schriftzeichen lesen? Ich habe es nicht ausprobiert, aber es würde mich überraschen.
Windows 7 x64; geposteter Kode bezieht sich (sofern nicht anders angegeben) immer auf das aktuellste PureBasic 64-Bit

Erst wenn man es seiner Schwiegermutter erklären kann, hat man es verstanden.
As gsündeste is oiwei guad essn und dringa und ned grang wern.
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Unicode-Unterstützung?

Beitrag von GPI »

Tanaghra hat geschrieben:Also ich verstehe das so, daß auf Betriebssystemebene bei Windows UTF-16 verwendet wird, und ich finde schon, daß eine allgemeine (also nicht auf das Internet oder sonstige Spezialbereiche spezialisierte) Programmiersprache sich auch an den Betriebssystem-Standards orientieren sollte -- zumindest in der Windows-Version von PureBasic.
Beschäftige dich dochmal bitte mit den Aufbau von UTF16 und UTF8. Das sind nur Kodierungsvorschriften, man kann Problemlos und verlustfrei zwischen beiden konvertieren. Welches Format das Betriebsystem nutzt ist schlicht irrelevant.
UTF8 hat einen gewaltigen Vorteil: JEDES Program, das ASCII einlesen kann, kann auch mit UTF8 Dateien umgehen. Mit UTF-16 wirds inkompatibel zu allen.
Kann tatsächlich der Windows 95-Editor eine in UTF-8 kodierte Datei mit chinesischen Schriftzeichen lesen? Ich habe es nicht ausprobiert, aber es würde mich überraschen.
UT8 ist in Bereich 0-127 identisch mit ASCII. Nur für zeichen drüber werden halt mehrere Zeichen verwendet. Bei UTF16 ist zu 99% jedes zweite Zeichen ein NULL und damit kann man das in normalen Editoren überhaupt nicht öffnen, geschweige denn ändern. Die chinesischen Zeichen werden natürlich nicht dargestellt - wie auch. die "UTF8"-Zeichenfolgen sind immer über Werte über 127. Das ist ja das geniale dran. Ein Programm, das Ascii einlesen kann, wird auch UTF8 lesen können. z.b. ein Compiler. Wenn er nur ASCII kann, ist das kein Problem, weil sämtliche Befehle und Zeichen, die ein Compiler in Sourcecode benutzt, sind in Bereich 0-127. Die anderen Zeichen über 128 können nur in Kommentaren oder Strings vorkommen. Da überliest er das quasi, weil er es nicht interpretieren muss. Es kann auch nicht vorkommen, das in einer UTF8-Zeichenfolge mittendrin ein LineFeed, Return, Zero etc. vorkommt.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Antworten