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

![]() |
BlitzMoritzBetreff: Dateiname mit Umlauten unter MacOS und Linux (gelöst) |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn das Linux-System seine Datei-Namen UTF-8 Kodiert, könnte es kompliziert werden. | ||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. ![]() |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Diese Programme unterstützen einfach nativ UTF-8, was bei BMax leider nicht der fall zu sein scheint. | ||
![]() |
BlitzMoritz |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
*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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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: (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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() Konvertierung UTF-codierter Dateinamen in Unix-Systemen |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group