Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

UTF-8

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
schneibva



Anmeldungsdatum: 25.11.2011
Beiträge: 5

BeitragVerfasst am: 25.11.2011, 17:32    Titel: UTF-8 Antworten mit Zitat

Hallo,

ich muss eine Datei einlesen, bei der die deutschen Umlaute UTF-8 codiert sind. Dafür gibt es den Zusatz ENCODING "UTF-8" für den OPEN-Befehl. Dummerweise muss ich die Version "-lang qb" benutzen, also __ENCODING.

Mache ich das, meckert FBC:

-----------------------------------------------------------------------
D:\FreeBASIC\fbc -lang qb -s console "sgfb51.bas"
sgfb51.bas(356) error 5: Expected 'AS', found '__ENCODING'
OPEN FileName$ FOR INPUT __ENCODING "UTF-8" AS #FileHandle
^

Build error(s)
-----------------------------------------------------------------------

Nur mit ENCODING ohne Unterstriche geht es auch nicht.
FBC-Version ist 0.23.0
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
darksider3



Anmeldungsdatum: 01.10.2011
Beiträge: 25
Wohnort: Münster

BeitragVerfasst am: 25.11.2011, 18:36    Titel: Antworten mit Zitat

sorry, den post nich ganz gelesen, wenn ich ne Antwort habe, editier ich das hier^^
:// Könntest du vielleicht den Abschnitt wo du öffnest Posten? Und wieso benutzt du FileName$ und nicht einfach FileName ?
Um deine Frage aber zu beantworten: Du öffnest mit "UTF-8" und nicht mit "utf8" OHNE Bindestrich zwinkern Also:
Code:

Dim as String Gived
Dim FileHandler as Integer = FREEFILE
Input "Dateiname: ", Gived
Open Gived For INPUT __ENCODING "utf8" AS #FileHandler
If Err = 0 Then
Print Gived&" Opened"
endif
sleep
end

Konnte hoffentlich helfen,
MFG
_________________
Meine Website
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 25.11.2011, 19:10    Titel: Antworten mit Zitat

Die Syntax stimmt soweit schon, was aber nicht geht, ist "__ENCODING" (siehe jeweils in der Referenz ganz unten ob es geht, denn dann steht es da auch so). Nicht jeder FB-Befehl ist durch zwei Unterstriche auch unter -lang qb verfügbar. Entweder du steigst auf -lang fb um (bzw. notfalls deprecated oder fblite), oder du bearbeitest die Datei vorher per Hand.

Generell ist -lang fb zu empfehlen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
schneibva



Anmeldungsdatum: 25.11.2011
Beiträge: 5

BeitragVerfasst am: 25.11.2011, 19:26    Titel: Antworten mit Zitat

http://www.freebasic-portal.de/befehlsreferenz/encoding-245.html

Laut dieser Seite muss ich __ENCODING und UTF-8 verwenden. Andere Variationen habe ich durchprobiert, Fehlanzeige.

Leider geht -lang fb oder -lang deprecated nicht, da mein Programm fast 13.000 Zeilen hat und aus einer alten QB-Source immer weiter entwickelt wurde.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
darksider3



Anmeldungsdatum: 01.10.2011
Beiträge: 25
Wohnort: Münster

BeitragVerfasst am: 25.11.2011, 19:33    Titel: Antworten mit Zitat

Kannst du die Source oder einen Auschnitt mal posten?happy
_________________
Meine Website
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
schneibva



Anmeldungsdatum: 25.11.2011
Beiträge: 5

BeitragVerfasst am: 26.11.2011, 00:05    Titel: Antworten mit Zitat

> Kannst du die Source oder einen Auschnitt mal posten?

Der relevante Ausschnitt lautet:

SUB SGFBM (FileName$)

'********** Einlesen der Daten aus Datei **********

FileHandle = FREEFILE
OPEN FileName$ FOR INPUT __ENCODING "UTF-8" AS #FileHandle

' bei __ENCODING tritt der Fehler auf (siehe 1. Post)
' sgfb51.bas(356) error 5: Expected 'AS', found '__ENCODING'

EndFlag = 0
'----------------------------------------------------------------------------
' C-Daten
DO UNTIL EOF(FileHandle) OR Endflag
LINE INPUT #FileHandle, A$: A$ = LCASE$(A$)
IF INSTR(A$, "<version") THEN EXIT DO
LOOP
' usw
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 26.11.2011, 00:52    Titel: Antworten mit Zitat

Sorry, hab vorhin nur direkt bei OPEN geschaut und nicht den ENCODING-Artikel gesichtet. Der Artikel lehnt sich an das englische Wiki an und da steht das ebenfalls so, aber in einer Sichtung des entsprechenden FBC-Codes wird ersichtlich, dass das explizit ausgeschlossen wurde. Welches verhalten da nun wirklich gewollt ist, muss ich erst klären, ich werde einen der Entwickler darauf ansprechen.

Bis dahin kannst du leider nichts machen, außer auf ENCODING zu verzichten bzw. zu -lang fb zu wechseln, auch wenn es viel Arbeit ist. Im Grunde glaube ich aber, dass du kein ENCODING brauchst. Deutsche Umlaute in .txt Dateien sind meistens trotzdem ASCII. Bei der Ausgabe werden sie falsch dargestellt, sind aber im Grunde richtig. Versuch mal die Ausgabe des Strings in die WSTR()-Funktion zu packen. Damit sollte es klappen.

Beispiel:
Code:
#Lang "qb"

Dim As String foo
foo = "föööö"

Print foo
Print __WStr(foo)
Sleep
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
schneibva



Anmeldungsdatum: 25.11.2011
Beiträge: 5

BeitragVerfasst am: 26.11.2011, 13:25    Titel: Antworten mit Zitat

> Versuch mal die Ausgabe des Strings in die WSTR()-Funktion zu packen. Damit sollte es > klappen.

Das habe ich schon versucht, geht nicht. Ich werde eine kleine Routine schreiben, es geht nur um die deutschen Umlaute äöüÄÖÜß. Die beginnen in UTF-8 immer mit CHR$(195), sind also leicht zu wandeln:

Code:
' ä 195 164  -> 132
' ö 195 182  -> 148
' ü 195 188  -> 129
' Ä 195 132  -> 142
' Ö 195 150  -> 153
' Ü 195 156  -> 154
' ß 195 159  -> 225
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 26.11.2011, 17:05    Titel: Antworten mit Zitat

Schon wieder das! Nein nein nein! Wir brauchen mal einen Sticky, wie man UTF-8 handhabt... einfach Zeichenketten zu suchen und zu ersetzen ist schlichtweg unsicher, falsch, führt zu Fehlern und und und.
Bitte iconv nutzen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 27.11.2011, 01:23    Titel: Antworten mit Zitat

Ich glaub das wird in -lang qb noch weniger funktionieren. durchgeknallt
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz