Dateiname mit Umlauten unter MacOS und Linux (gelöst)

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

BlitzMoritz

Betreff: Dateiname mit Umlauten unter MacOS und Linux (gelöst)

BeitragDo, Aug 07, 2008 21:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Man kann Dateinamen (eben auch unter MacOS und Linux) mit den Buchstaben ä,Ä,ö,Ö,ü,Ü und ß versehen. Bilder, Klänge u.a., welche solche deutschen Sonderbuchstaben im Dateinamen haben, werden von den professionellen, großen Programmen ohne Probleme geladen, auch über die Konsole erhält man keine "falschen" anderen Dateinamen oder Fehlermeldungen.
Gibt es dann nicht doch irgendeinen Trick, solche Dateien auch in BlitzMax-Programmen (unter Linux und MacOS) laden zu können oder bleibt das weiterhin unmöglich?
  • Zuletzt bearbeitet von BlitzMoritz am Do, Aug 21, 2008 21:02, insgesamt einmal bearbeitet

Blackside

BeitragDo, Aug 07, 2008 22:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiß nicht ob das bei Linux so geht, aber normalerweise müsste es mit Chr(acii-code vom Zeichen) gehen...
Hier sollte eigentlich eine Signatur stehen!

BtbN

BeitragDo, Aug 07, 2008 22:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn das Linux-System seine Datei-Namen UTF-8 Kodiert, könnte es kompliziert werden.
 

Dreamora

BeitragDo, Aug 07, 2008 22:23
Antworten mit Zitat
Benutzer-Profile anzeigen
das wär ein ernsthaftes problem, denn der file io kern von BM ist ASCII only
kein UTF support
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

BlitzMoritz

BeitragMo, Aug 11, 2008 22:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Auch Chr(...) etc. bringt nichts, weder auf Linux ubuntu Gutsy Gibbon, noch auf MacOS Leopard.
Bei folgendem Code wird bereits beim ersten If gemeldet, dass die Datei überhaupt nicht gefunden wird:
Code: [AUSKLAPPEN]
Local Dateiname:String =  "gr" + Chr(252) + "n.png"      '(grün.png)
If FileType(Dateiname) = 0 Then
   Notify "Die Datei '" + Dateiname + "' existiert nicht."
Else
   Notify "Die Datei '" + Dateiname + "' existiert."
End If

Obwohl die Datei vorhanden ist! Mit ReadDir(CurrentDir()) etc. wird sie in der BM-Konsole als "grün.png" (oder so ähnlich) aufgelistet. Umgekehrt bringt das direkte Einfügen eines solchen Dateinamens in den Code natürlich nichts: Entweder findet BM die Datei ebenfalls nicht oder kann mit bestimmten Zeichen nichts anfangen. Interessanter Weise meldet das Notify-Fenster den exakten Dateinamen "grün.png".
Zitat:
...Wenn das Linux-System seine Datei-Namen UTF-8 Kodiert ...

Wie prüft man das nach? Ich glaube aber nicht, dass das "böse" Linux schuld ist: Beim heiligen MacOS Leopard ist der Fehler genauso vorhanden. Komisch, dass das bisher noch keinen gestört hat...
Bitte sagt mir, wenn's ein Mittel dagegen gibt. Sad

BtbN

BeitragMo, Aug 11, 2008 22:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gibt kein mittel Dagegen, dass ein Unix-Like system(wozu auch MacOS zählt), seine Dateinamen in UTF-8 kodiert. Gabs in BMax nicht mal son UTF-8 Stream/String gedöns?

BlitzMoritz

BeitragMo, Aug 11, 2008 22:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Das wäre schick...
Was mich nämlich irritiert, dass alle anderen bzw. großen Programme wie "Gimp", "OpenOffice" usw. natürlich überhaupt keine Probleme mit solchen Datei(-Namen) haben. Also muss es doch irgendeinen Informationsfluss geben.

BtbN

BeitragMo, Aug 11, 2008 22:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Diese Programme unterstützen einfach nativ UTF-8, was bei BMax leider nicht der fall zu sein scheint.

BlitzMoritz

BeitragMi, Aug 13, 2008 8:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Beobachtung:
Mit "RequestDir()" usw. kann die Umlautdatei erfolgreich geladen werden! Der Dateinamen erscheint in der File-Liste des Dialogs zwar wieder verfälscht und ohne Umlaute, das Laden klappt aber wie gesagt einwandfrei. Nur das direkte Laden aus dem Code heraus mit "Load..." usw. ist nicht möglich.
Der von euch angesprochene BM-UTF-8 -Verdacht wurde erhärtet durch folgenden Test, bei dem ich den Ordnerinhalt in eine Datei ausgelesen habe:
Code: [AUSKLAPPEN]
Dir = ReadDir(CurrentDir())
Diagnose = WriteFile("Diagnose.txt")
Local Filename:String
Repeat
   Filename = NextFile(Dir)
   If Filename = "grün.png" Then
      WriteLine Diagnose,  "''grün.png'' wurde identifiziert als = ''" + Filename + "''"
   ElseIf Filename = "gr" + Chr(252) + "n.png"  Then
      WriteLine Diagnose,  "''gr'' + Chr(252) + ''n.png'' wurde identifiziert als = ''" + Filename + "''"
   Else
      WriteLine Diagnose, Filename + " <> grün.png"
   End If
Until Filename = ""

Weder der erste Fall, noch der zweite traten ein, hingegen tauchte die Zeile auf:
grÃŒn.png <> grün.png
In meinem Texteditor war zu ersehen, dass BM die txt-Datei mit der Codierung "Westlich (ISO-8859-15)" erstellt hat, die derzeitige Standorteinstellung aber "UTF-8" ist.
Fazit: Die von BM ausgehende Text-Codierung lässt eine direkte Korrespondenz von Umlauten mit Unix-Systemen generell nicht zu. Schade...
 

Dreamora

BeitragMi, Aug 13, 2008 9:06
Antworten mit Zitat
Benutzer-Profile anzeigen
die Textkodierung kann sehr wohl UTF sein, da hat blitz kein problem mit.
Du musst nur die Textkodierung auch festlegen, denn UTF enforce heisst automatisch das Win98/WinME rausfällt (kaum jemand hatte damals das UTF Addon installiert)

Nur der grundlegende IO kern von BM ist ASCII
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

BlitzMoritz

BeitragMi, Aug 13, 2008 10:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Was bedeutet das für das ursprüngliche Problem?
Code: [AUSKLAPPEN]
File = Loadfile("grün.png")

Wie und an welcher Stelle soll man da die Textkodierung festlegen, so dass die Datei unter Unix gefunden wird?
 

Dreamora

BeitragMi, Aug 13, 2008 10:16
Antworten mit Zitat
Benutzer-Profile anzeigen
das ist nicht textkodierung, das ist fileio

Textkodierung ist Inhalt der Datei
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Silver_Knee

BeitragMi, Aug 13, 2008 15:41
Antworten mit Zitat
Benutzer-Profile anzeigen
*kurzinfo über mich* Ich habe weder BMax noch Linux noch MacOS

Allerdings versuch doch folgendes:

Kuk dir die Diagnose in ASCII-Codes an.

Such dir die 2 ASCII codes für das ü als "ÃŒ" raus und teste:
Code: [AUSKLAPPEN]
Dir = ReadDir(CurrentDir())
Diagnose = WriteFile("Diagnose.txt")
Local Filename:String
Repeat
   Filename = NextFile(Dir)
   If Filename = "gr"+Chr(...)+Chr(...)+"n.png" Then
      WriteLine Diagnose,  "''grün.png'' wurde mit den 2 Symbolen identifiziert"
   Else
      WriteLine Diagnose, Filename + " <> grün.png"
   End If
Until Filename = ""

BlitzMoritz

BeitragMi, Aug 13, 2008 17:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Diese Idee hatte ich auch schon 'mal und an anderer Stelle half sie sogar tatsächlich, als es nämlich darum ging, mit AppArgs die Startparameter eines Programms auch unter Linux richtig zu "lesen", wer's ebenfalls nutzen möchte, hier der Code:
Code: [AUSKLAPPEN]
Local Startpar:String[] = AppArgs[1..]
Local i:Int, j:Int, Ascii:Int
'Da die Kommunikation über das System läuft,
'müssen ggfs. deutsche Sonderbuchstaben 'von Hand' korrigiert werden:
For j = 1 To Len(StartPar[1])     'vorausgesetzt, es gibt StartPar[1]
   Ascii = Asc(Mid(StartPar[1],j,1))
   Select Ascii
      Case 138
         StartPar[1] = Left(StartPar[1], j-1) + "ä" + Right(StartPar[1], Len(StartPar[1])-j)
      Case 128
         StartPar[1] = Left(StartPar[1], j-1) + "Ä" + Right(StartPar[1], Len(StartPar[1])-j)
      Case 154
         StartPar[1] = Left(StartPar[1], j-1) + "ö" + Right(StartPar[1], Len(StartPar[1])-j)
      Case 133
         StartPar[1] = Left(StartPar[1], j-1) + "Ö" + Right(StartPa[1], Len(StartPar[1])-j)
      Case 159
         StartPar[1] = Left(StartPar[1], j-1) + "ü" + Right(StartPar[1], Len(StartPar[1])-j)
      Case 134
         StartPar[1] = Left(StartPar[1], j-1) + "Ü" + Right(StartPar[1], Len(StartPar[1])-j)
      Case 167
         StartPar[1] = Left(StartPar[1], j-1) + "ß" + Right(StartPar[1], Len(StartPar[1])-j)
   End Select
Next

Im hiesigen Problem scheint das jedoch nicht zu helfen.
Aufgrund der Codierungsunterschiede entstehen in Texten Ascii-Codes, welche keine wie immer gearteten Buchstaben darstellen. Verschiedene Editoren versuchen eben trotzdem, daraus irgendetwas zu machen, wobei sehr Unterschiedliches herauskommen kann. Kopiert man beispielsweise das "grÃŒn" aus der Diagnose.txt-Datei in den BM-Editor, kommt stattdessen "grÃ\u0152n" heraus. Als ich mit folgendem Code die Ascii-Zeichen aus der Datei.txt mit dem Inhalt "grÃŒn" herauslesen wollte,
Code: [AUSKLAPPEN]
file = ReadFile("Datei.txt")
new_file = WriteFile("AscDiagnose.txt")
Repeat
      Local line:String = ReadLine(file)
      For i:Int = 1 To Len(line)
         WriteLine new_file, "Asc(" + Mid(line,i,1) + ") = " + Asc(Mid(line,i,1))
      Next
Until Eof(file)

entstand im Texteditor Folgendes:

user posted image

(Ich musste dies als Bild hochladen, anders war es nicht anzuzeigen.)
Mit "ü" wurden also gleich vier Zeichen auf einmal assoziiert. Umgekehrt führte jedoch der folgende Versuch auch nicht zum Erfolg:

Code: [AUSKLAPPEN]
Dir = ReadDir(CurrentDir())
Diagnose = WriteFile("Diagnose.txt")
Local Filename:String
Repeat
   Filename = NextFile(Dir)
   If Filename = "gr" + Chr(195) + Chr(131) + Chr(197) + Chr(146) + "n.png"  Then
      WriteLine Diagnose,  "Gefunden Fall 1"
   ElseIf Left(Filename,2) = "gr" And Asc(Mid(filename,3,1)) = 195 And Asc(Mid(filename,4,1)) = 131 And Asc(Mid(filename,5,1)) = 197 And Asc(Mid(filename,6,1)) = 146 And Right(filename,5) = "n.png"  Then
      WriteLine Diagnose,  "Gefunden Fall 2"
   Else
      WriteLine Diagnose, Filename + " <> grün.png"
   End If
Until Filename = ""

Nach wie vor wird "grün.png" nicht erkannt, sondern nur "grÃŒn <> grün" ausgespuckt.

Silver_Knee

BeitragMo, Aug 18, 2008 16:26
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm was ist mit dem Vergleich aus BMax heraus ohne die Brücke "Datei"

Alla zeige eine liste aller Zeichen der Dateinamen sammt ASCII-Codes an?

BlitzMoritz

BeitragDo, Aug 21, 2008 21:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, Silver_Knee, der Umweg über eine externe Datei war ein Fehler, da diese einschließlich der Editoren ja wieder ihr eigenes Kodierungs-Süppchen kochen.
Ich hab' jetzt 'ne Function gebastelt, die das Problem behebt Razz , und sie in das Codearchiv gestellt unter dem Titel:
Konvertierung UTF-codierter Dateinamen in Unix-Systemen

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group