Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
schneibva
Anmeldungsdatum: 25.11.2011 Beiträge: 5
|
Verfasst am: 25.11.2011, 17:32 Titel: UTF-8 |
|
|
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 |
|
 |
darksider3
Anmeldungsdatum: 01.10.2011 Beiträge: 25 Wohnort: Münster
|
Verfasst am: 25.11.2011, 18:36 Titel: |
|
|
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 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 |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 25.11.2011, 19:10 Titel: |
|
|
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 |
|
 |
schneibva
Anmeldungsdatum: 25.11.2011 Beiträge: 5
|
Verfasst am: 25.11.2011, 19:26 Titel: |
|
|
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 |
|
 |
darksider3
Anmeldungsdatum: 01.10.2011 Beiträge: 25 Wohnort: Münster
|
Verfasst am: 25.11.2011, 19:33 Titel: |
|
|
Kannst du die Source oder einen Auschnitt mal posten? _________________ Meine Website |
|
Nach oben |
|
 |
schneibva
Anmeldungsdatum: 25.11.2011 Beiträge: 5
|
Verfasst am: 26.11.2011, 00:05 Titel: |
|
|
> 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 |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 26.11.2011, 00:52 Titel: |
|
|
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 |
|
 |
schneibva
Anmeldungsdatum: 25.11.2011 Beiträge: 5
|
Verfasst am: 26.11.2011, 13:25 Titel: |
|
|
> 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 |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 26.11.2011, 17:05 Titel: |
|
|
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 27.11.2011, 01:23 Titel: |
|
|
Ich glaub das wird in -lang qb noch weniger funktionieren.  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
|