Also - inzwischen bin ich etwas schlauer. Die Function um Ascii in Utf8 zu wandeln, habe ich nachgebaut - funktioniert auch. Das Problem mit dem € wird damit aber nicht aus der Welt geschafft. beim €-Zeichen gibt es eine Ausnahme. Als Ascii wird da normalerweise 128 als Wert zurückgegeben. Das ist aber eigentlich falsch - das richtige €-Zeichen hat offiziell den Code 8364. bei Utf8 wird das auch so verwendet. Bei der Umwandlung müsste man das eben speziell abfangen. Und genau das macht der Flag #PB_UTF8 bei WriteString() wenn er in einer Ascii-Exe ausgeführt wird nicht. Ob das jetzt ein Bug ist oder nicht... will ich nicht beurteilen
Die Frage ist jetzt wie man das am besten manuell machen/korregieren kann.
Mein erster Versuch ist:
Code: Alles auswählen
Procedure.s WriteStringAsciiToUtf8(file, string$)
c = Asc(Mid(string$, i, 1))
For i = 1 To Len(string$)
c = Asc(Mid(string$, i, 1))
If c < 128
WriteByte(file,c)
Else
If c = 128
WriteByte(file,$E2) : WriteByte(0,$82) : WriteByte(0,$AC)
Else
WriteByte(file, (c>>6)|192)
WriteByte(file, (c&63)|128)
EndIf
EndIf
Next i
EndProcedure
CreateFile(0, "D:\daten\test.txt")
test$ = "€ äöü";
WriteStringFormat(0, #PB_UTF8)
;WriteString(0,test$, #PB_UTF8)
WriteStringAsciiToUtf8(0,test$)
CloseFile(0)
Leider wird das bestimmt nicht besonders schnell sein (habs aber noch nicht getestet und verglichen). Das andere Problem ist dann noch: das €-Zeichen wird da wohl nicht die einzige Ausnahme sein. bei den ersten Versuchen hat sich z.B. das >„< auch als so ein Zeichen herausgestellt... wird man halt mal alle > 128 durchgehen müssen - sind bestimmt noch einige dieser Sonder 3-Bit Ausnahmen dabei.