Seite 1 von 2
UTF-8 Bug?
Verfasst: 16.11.2006 20:49
von WHEEZ
Hallo,
ich habe ein seltsames Problem mit Utf8. Folgender Code:
Code: Alles auswählen
CreateFile(0, "C:\test.txt")
WriteStringFormat(0, #PB_UTF8)
WriteString(0,"€" ,#PB_UTF8)
CloseFile(0)
(das Zeichen das geschrieben werden soll ist das >€< - wird nur hier als Code nicht dargestellt)
Der Schnipsel sollte eigentlich das "€" Zeichen in eine Textdatei speichern. Klappt aber nicht - ergibt nur Quatschzeichen. In der Original IDE (PB 4.0.1) wird das Zeichen nicht mal im Quellcode dargestellt (JaPBe geht). Sobald ich mit der Option "Unicode-Exe" kompiliere, geht es. In der Hilfe zu WriteString() steht allerdings dass es egal sei. Mein Problem ist, dass ich das in einem recht umfangreichen Programm brauche, das sich leider nicht so einfach auf Unicode umstellen lässt.
Was anderes noch - ich dachte zwar dass ich die aktuelle 4.0.1 installiert hätte (die IDE zeigts auch an) - aber "Debug #PB_Compiler_Version" gibt bei mir trotzdem nur 4.0 aus - ist nicht normal, oder?
Ich hoffe Ihr könnt mir helfen - Vielen Dank schon mal,
WHEEZ
Re: UTF-8 Bug?
Verfasst: 16.11.2006 21:15
von ts-soft
WHEEZ hat geschrieben:
Was anderes noch - ich dachte zwar dass ich die aktuelle 4.0.1 installiert hätte (die IDE zeigts auch an) - aber "Debug #PB_Compiler_Version" gibt bei mir trotzdem nur 4.0 aus - ist nicht normal, oder?
Wer sagt denn, das es Veränderungen am Compiler gab? Vielleicht sind
nur die Libs geupdated worden?
Verfasst: 16.11.2006 21:34
von AND51
Habe in PB mit UTF-8 noch nie gearbeitet, aber ich rate trotzdem mal: Musst du vielleicht die option »Unicode« in den Compileroptionen aktivieren?
Verfasst: 17.11.2006 12:18
von WHEEZ
AND51 hat geschrieben:Habe in PB mit UTF-8 noch nie gearbeitet, aber ich rate trotzdem mal: Musst du vielleicht die option »Unicode« in den Compileroptionen aktivieren?
Genau das ist ja mein Problem - wenn ich bei dem Projekt (sehr Umfangreich wie gesagt) die Compilieroption "Unicode" aktiviere, klappt einiges nicht mehr - einige, schon etwas ältere, Komponenten/Libs kommen da nicht klar - gibt nur Fehler über Fehler... Das geht wirklich nicht. Das dürfte aber laut Hilfe auch kein Problem sein. Umgekehrt (also das Einlesen von UTF8 geht auch ohne Probleme).
Verfasst: 17.11.2006 13:50
von #NULL
Code: Alles auswählen
CreateFile(0, "C:\test\test2.txt")
WriteStringFormat(0, #PB_UTF8)
WriteString(0, "praiz : 99", #PB_UTF8)
WriteByte(0,%11100010) : WriteByte(0,%10000010) : WriteByte(0,%10101100)
WriteString(0, " (very teuer :[ )", #PB_UTF8)
CloseFile(0)
..ich habe probiert es manuell zu schreiben, bei mir funktioniert's. ich kann dir aber nix zur zuverlässigkeit sagen. eine andere möglichkeit hab ich irgendwie nich' hingekriegt.
Verfasst: 17.11.2006 14:56
von WHEEZ
So klappt das schon - da schreibe ich ja praktisch selber die nötigen Bytes - aber das ist ja keine Lösung.... Wenn man das erzeugte (richtige) File wieder mit ReadString() einliest und versucht erneut per WriteString() (jeweils mit #PB_UTF8 natürlich) zu schreiben - gibts wieder den Fehler. Ich müsste halt wissen ob es sich dabei wirklich um einen Bug des Compilers handelt, oder nicht. Sollte es ein Bug sein, müsste ich mir eine Hilfs-Funktion (z.B. WriteRealUTF8StringWithNonUnicodeExe() ) schreiben die das vorher parst geradebiegt und byteweise schreibt.
Verfasst: 17.11.2006 15:31
von ts-soft
In einer ASCII-Exe können UTF-8 Strings nur im Speicher existieren, aber
niemals als String! Peek und Poke, aber niemals einem String zuordnen, der
kann nur ASCII

Verfasst: 17.11.2006 16:41
von WHEEZ
Ist dann das aus der Hilfe:
WriteString(#Datei, Text$ [, Flags])
#PB_UTF8 : Schreibt den String im UTF8-Format, auch wenn das Programm im Ascii-Modus kompiliert ist
falsch? oder versteh ich da was falsch? Wenn der String eh nicht als UTF-8 existieren kann hat doch der Flag keinen Sinn? ASCII ist ja eine Teilmenge von UTF-8 (dachte ich).
Egal - da ich von vielen String-Funktionen gebrauch mache, brauche ich also dann vor dem Speichern einen ASCII-TO-UTF8 Converter - alla Ascii2Utf8(*BufferVon, *BufferNach) wenn ich eine korrekte UTF8 Datei erzeugen will. Hat da zufällig jemand mal was in die Richtung gesehen?
Verfasst: 17.11.2006 18:15
von #NULL
versteh'ichnich.
bei einer Ascii2Utf8(*BufferVon, *BufferNach) , wo im ersten buffer eh nur ascii-zeichen sind brauchst du doch nix konvertieren, da du die ja einfach der WriteString(0,ascii$,#PB_UTF8) -funktion übergeben mußt. wenn im quellbuffer aber utf-8 zeichen drin sind, dann sind sie ja schon im speicher. das #PB_UTF8 -flag ist (scheinbar) nur dazu da ascii-zeichen als utf-8 zu speichern, aber nicht um spezielle utf-8 zeichen zu schreiben.
Verfasst: 17.11.2006 18:33
von WHEEZ
So wie es aussieht sind nur die Char 0-127 von Ascii (was auch das reine Ascii ist) identisch mit UTF-8. das "€" Zeichen ist aber z.B. char(128) - das hat bei UTF-8 schon 2 Bytes. Alle Zeichen von 128-255 haben in UTF-8 also 2 Bytes.