Seite 1 von 2
UTF8 nach ASCII
Verfasst: 22.12.2006 19:10
von DarkCrow
Hallo PBler,
ich wollte eine Datei vom UTF8 nach ASCII konvertieren, leider funktioniert mein "Konstrukt" nicht wie gewünscht, denn es gibt mir kein ASCII zurück.
Hier mein Code:
Code: Alles auswählen
Procedure UTF8toASCII(file_name$)
in = ReadFile(#PB_Any, file_name$)
out = CreateFile(#PB_Any,file_name$ + ".ASCII." + GetExtensionPart(file_name$))
If in And out
While Eof(in) = 0
*mem = AllocateMemory(1048576)
text$ = ReadString(in, #PB_UTF8)
PokeS(*mem, text$, Len(text$), #PB_UTF8)
text$ = PeekS(*mem, -1, #PB_Ascii)
WriteStringN(out,text$,#PB_Ascii)
Wend
CloseFile(in)
EndIf
EndProcedure
Bin ich auf dem richtigen Weg? Oder wie würdet ihr sowas machen?
Verfasst: 22.12.2006 19:27
von ts-soft
Alles was ASCII ist in UTF-8, liegt dort auch so vor. Der Rest ist nicht
in ASCII vorhanden, also wozu die Wandlung?
Verfasst: 22.12.2006 19:56
von DarkCrow
Hmm, das stimmt, mein Problem ist, dass ich, wenn ich mit UEStudio per Konvertieren\UTF8 nach ASCII die Datei konvertier, die Datei einwandfrei mit meinem Delphi Programm verarbeiten kann.
Ich werd mal schauen, warum es nach der Konvertierung geht und vorher nicht.
Danke.
Verfasst: 22.12.2006 20:20
von ts-soft
Ansonsten sollte es so reichen
Code: Alles auswählen
Procedure UTF8toASCII(file_name$)
Protected in.l = ReadFile(#PB_Any, file_name$)
Protected out.l = CreateFile(#PB_Any,file_name$ + ".ASCII." + GetExtensionPart(file_name$))
If in And out
ReadStringFormat(in)
While Not Eof(in)
text.s = ReadString(in, #PB_UTF8)
WriteStringN(out, text.s, #PB_Ascii)
Wend
CloseFile(in)
CloseFile(out)
EndIf
EndProcedure
text.s erhält automatisch ASCII wenns eine ASCII exe ist, bzw. UNICODE
wenns eine UNICODE exe ist, was anderes kann PB als String sowieso
nicht verarbeiten, nur im Speicher.
Strings haben immer das Format der Exe!!!
Verfasst: 23.12.2006 12:26
von #NULL
*anmerk*
wenn das öffnen einer der dateien fehlschlägt, wird die andere nicht geschlossen.
Verfasst: 23.12.2006 14:09
von ts-soft
#NULL hat geschrieben:*anmerk*
wenn das öffnen einer der dateien fehlschlägt, wird die andere nicht geschlossen.
Was dann ja auch nicht so wichtig ist, da man nicht mehr drauf zugreift.
Prüfen ist wichtig, aber übertreiben muß man es nicht auch noch, sonst
fängt jede Zeile mit If an

Verfasst: 23.12.2006 15:49
von Hellhound66
Es gibt in meinen Augen wenig, was wichtiger ist, als prüfen. Und die beiden Closefile() mit ner If-Anweisung aus der Schleife zu nehmen ist ja auch nicht so tragisch. Aus meiner Sicht sind wir noch Meilen entfernt von "übertreiben".
Verfasst: 23.12.2006 16:52
von ts-soft
Da die Dateien in diesem Falle nicht genutzt werden, reicht der Hinweis aus der Hilfe:
PureBasic.chm hat geschrieben:Hinweis: Am Programmende ist PureBasic "klug" genug, um alle offenen Dateien automatisch zu schließen. Deshalb müssen Sie dies nicht unbedingt selbst erledigen.
Verfasst: 23.12.2006 17:10
von Hellhound66
Da die Dateien in diesem Falle nicht genutzt werden, reicht der Hinweis aus der Hilfe:
Weisst du es?
Könnte sein, dass die Datei während der Laufzeit nochmal erstellt wird, dann ist es zum Scheitern verurteilt.
Verfasst: 23.12.2006 17:11
von #NULL
@ts-soft
da steht nur eine prozeduren-definition. die proc wird nicht aufgerufen, also kann man reinschreiben was man will, ist immer sicher, das 'programm'.