Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Delphi Dateiname mit Umlaut in Android (https://www.delphipraxis.net/179148-dateiname-mit-umlaut-android.html)

SaBaN 17. Feb 2014 13:40

Dateiname mit Umlaut in Android
 
Hallo,

nach langer Suchen habe ich weder im Internet noch hier im Forum für mein Problem eine Lösung gefunden.
Mein Problem: Ich versuche grade einen App für Android zu schreiben, wenn ich eine Datei Bereitstellen will und die Dateiname einen Umlaut enthält, zb. Müller.txt dann löst Delphi XE5 einen Fehler aus.
[PAClient Fehler] "paclient" exited with code 1.
Wenn ich jedoch den Dateiname umbenenne auf Muller.txt dann kann ich ohne Probleme auf das Gerät Deployen.
Gibt es eine Einstellung in Delphi oder muss ich an dem Android-Gerät was einstellen?

mfg
saban

arnof 17. Feb 2014 16:25

AW: Dateiname mit Umlaut in Android
 
1. das macht man nicht

2. das sollte man vermeiden

3. wer das macht ist unerfahren ....


Lösung:

Mueller.txt

Aber man beachte das ist ein linuxbasierendes Betriebssystem, d.h. Neben sämtlichen Umlauten noch auf Groß und Kleinschreibung der Dateien achten!

himitsu 17. Feb 2014 16:40

AW: Dateiname mit Umlaut in Android
 
Selbst die Dateisysteme von Linux/Unix sollten Unicode beherschen, :gruebel:
also warum sollte man das nicht machen?


Groß-/Kleinschreibung kommt nicht auf das OS an, sondern auf's Dateisystem, wo man auch vom Windows aus drauf zugreifen kann.
Aber ja, in Linux/Unix sind die im Allgemeinen Case-Sensitive.

mjustin 17. Feb 2014 17:02

AW: Dateiname mit Umlaut in Android
 
Dateinamen auf Android verwenden standardmäßig Unicode (UTF-8 kodiert):

http://stackoverflow.com/questions/2...mes-on-android

Bei der Bereitstellung müsste Delphi daher eigentlich den Windows-Dateinamen passend machen.

Kann man die lokale Datei erfolgreich über das Android SDK auf das Gerät kopieren?

Bernhard Geyer 17. Feb 2014 18:47

AW: Dateiname mit Umlaut in Android
 
Da die erste Implementierung des Multiplattform-Supports mal auf Teilen von FreePascal basierte tipp ich darauf das man hier noch einige Bugs beim Unicode/UTF8/Ansistring-Handling hat.

arnof 17. Feb 2014 18:50

AW: Dateiname mit Umlaut in Android
 
deshalb macht man das nicht, warum soll man sich um Bug andere Leute kümmern, das kostet nur unendlich sinnlose Zeit.

Deshalb generell (egal welche Umgebung) nur normale Zeichen keine Punkte Klammern oder sonstige Umlaute/Sonderzeichen.

Glaubt mal einen alten Hasen, schon hat man viele Probleme weniger.

SaBaN 18. Feb 2014 18:07

AW: Dateiname mit Umlaut in Android
 
Nun das Problem ist, dass dem Nutzer eine App-interne Suchfunktion angeboten wird.
Der Nutzer würde nach z.B. "Öl" suchen und nicht nach "Oel".
Deswegen ist es mir wichtig, dass die Textdateien auch mit Umlaute bereitgestellt werden können.

Mir ist aufgefallen, dass das Problem nur im Ordner "Assets" und in dessen Unterordnern erscheint.
Aber eine Datei im "Bin" Ordner würde mir nichts bringen, da ich nur auf das "Assets\Internal\" Ordner zugreifen kann.

Zur Zeit fallen mir nur komplizierte Lösungswege ein, die ich lieber vermeiden möchte.

Und nochwas möchte ich bemerken: das Problem habe ich für iOS Geräte nicht.

himitsu 18. Feb 2014 18:38

AW: Dateiname mit Umlaut in Android
 
Im Android sind viele Teile aus mehrereren Partitionen/Dateien mit den unterschiedlichstens Dateisystemen reingemappt ... eventuell kann das Dateisystem dort wirklich keine Umlaute?

v2afrank 19. Feb 2014 06:31

AW: Dateiname mit Umlaut in Android
 
Zitat:

eventuell kann das Dateisystem dort wirklich keine Umlaute
Ich habe gerade mein Handy aufgeklappt und die Datei reservierungsbestätigung.pdf gesehen. Es gehen also Umlaute. Einem User die Umlaute in der heutigen zeit zu verbieten halte ich für gewagt

Buddelfish 19. Feb 2014 07:51

AW: Dateiname mit Umlaut in Android
 
Wie wäre es mit dem Workaround, bei der Suche nach Öl auch nach Oel zu suchen. Wäre sinnvoll und tut nicht weh.

Daniel 19. Feb 2014 08:18

AW: Dateiname mit Umlaut in Android
 
@SaBaN: Kannst Du auf die Schnelle ein Minimal-Beispiel erstellen, welches den Fehler demonstriert? Ich würde das gern weiterleiten.

BUG 19. Feb 2014 12:35

AW: Dateiname mit Umlaut in Android
 
Zitat:

Zitat von himitsu (Beitrag 1248234)
Selbst die Dateisysteme von Linux/Unix sollten Unicode beherschen, :gruebel:
also warum sollte man das nicht machen?

Zum Beispiel: Leute ohne Umlaute auf der Tastatur (im Zweifelsfall du) können nicht mehr ordentlich in der Kommandozeile mit den Dateien arbeiten. Niemand würde auf die Idee kommen, eine diff-Datei "Patch from Version 1 to 2.δ" zu nennen, nur weil man Delta benutzen kann und es gut aussieht.

Ich finde es etwas merkwürdig, das der Benutzer über den Dateinamen in den Assets suchen kann. Irgendwie fühlt es sich nicht nach einer guten Idee an.

mjustin 19. Feb 2014 13:11

AW: Dateiname mit Umlaut in Android
 
Zitat:

Zitat von BUG (Beitrag 1248515)
Zitat:

Zitat von himitsu (Beitrag 1248234)
Selbst die Dateisysteme von Linux/Unix sollten Unicode beherschen, :gruebel:
also warum sollte man das nicht machen?

Zum Beispiel: Leute ohne Umlaute auf der Tastatur ...

Genauer: Leute ohne Umlaute auf der Tastatur, die auch keine Alt-Taste und keinen Ziffernblock haben :)

BUG 19. Feb 2014 13:34

AW: Dateiname mit Umlaut in Android
 
Zitat:

Zitat von mjustin (Beitrag 1248528)
keinen Ziffernblock haben

Das sind nicht wenige, besonders bei Laptops. Eine Alt-Taste habe bis jetzt immer gefunden :stupid:

himitsu 19. Feb 2014 13:49

AW: Dateiname mit Umlaut in Android
 
Zitat:

Zitat von BUG (Beitrag 1248534)
Eine Alt-Taste habe bis jetzt immer gefunden :stupid:

Siehe ShoutBox :lol:

SaBaN 19. Feb 2014 14:33

AW: Dateiname mit Umlaut in Android
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von BUG (Beitrag 1248515)
Ich finde es etwas merkwürdig, das der Benutzer über den Dateinamen in den Assets suchen kann. Irgendwie fühlt es sich nicht nach einer guten Idee an.

Es ist so, dass die Textdateien im Assets\Internal\ Ordner bereitgestellt werden. Diese werden dann nach den Dateinamen gesucht und in einer Liste gelistet.
Dabei kann der Benutzer eigene Textdateien erstellen und die Dateiname ist dann der Titel.
Was findest du da merkwürdig?

Zitat:

Zitat von Daniel (Beitrag 1248460)
@SaBaN: Kannst Du auf die Schnelle ein Minimal-Beispiel erstellen, welches den Fehler demonstriert? Ich würde das gern weiterleiten.

findest du ein Minimal-Beispiel. Ich habe die Datei Müller.txt im Bereitstellungs-Manager deaktiviert.
Wenn du es aktivierst, solltest du den oben gennanten Fehler erhalten.

Im App kannst du die Datei Müller.txt erstellen, welches ohne Probleme funktionieren sollte.

Daniel 19. Feb 2014 19:23

AW: Dateiname mit Umlaut in Android
 
Vielen Dank für das Demo - aktuell scheint der Hoster ein Problem zu haben, ich versuche es morgen früh erneut.

himitsu 20. Feb 2014 01:23

AW: Dateiname mit Umlaut in Android
 
Liste der Anhänge anzeigen (Anzahl: 1)
Fast 28 MB für eine kleine Demo. (130 MB ungepackt)
Die 52 KB der reinen Quellcodes (ohne die Verzeichnisse Android und __history) hätte man auch direkt hier anhängen können.
[edit] siehe Anhang


PS: Oben auf den Dateinamen klicken
und nicht unten auf den großen Downloadbutton, welcher nur einen Downloadmanager runterladen will.

SaBaN 20. Feb 2014 05:28

AW: Dateiname mit Umlaut in Android
 
Zitat:

Zitat von himitsu (Beitrag 1248681)
Fast 28 MB für eine kleine Demo. (130 MB ungepackt)
Die 52 KB der reinen Quellcodes (ohne die Verzeichnisse Android und __history) hätte man auch direkt hier anhängen können.
[edit] siehe Anhang


PS: Oben auf den Dateinamen klicken
und nicht unten auf den großen Downloadbutton, welcher nur einen Downloadmanager runterladen will.

Habe auf die göresse nicht gedacht, danke für den hinweis jetzt habe ich entsprechend umgestellt.

Union 22. Feb 2014 11:41

AW: Dateiname mit Umlaut in Android
 
Die assets werden vom AAPT auf gültige Zeichen und Dateinamen geprüft. Ist also kein EMBT Problem. Es dürfen nur Zeichen verwendet werden, die auch in Java-Symbolen zulässig sind und auch keine reservierten Java-Bezeichner als Dateinamen.

Des weiteren werden bestimmte Dateinamensmuster (z.b. aus einem CVS oder Thumbs.db) IGNORIERT um zu verhindern dass beim Übertragen kompletter Verzeichnisse irgendwelche Systemdateien mit im Projekt landen.


AaptAssets.cpp
Code:
/*
 * Names of asset files must meet the following criteria:
 *
 *  - the filename length must be less than kMaxAssetFileName bytes long
 *    (and can't be empty)
 *  - all characters must be 7-bit printable ASCII
 *  - none of { '/' '\\' ':' }
 *
 * Pass in just the filename, not the full path.
 */

SaBaN 23. Feb 2014 10:55

AW: Dateiname mit Umlaut in Android
 
Wenn die Assets vom AAPT auf ungültige Zeichen überprüft wird, wie kann ich dann im App Dateien mit Umlaut erstellen?
Siehe dir dazu mein Demo an.

Bei "ungültigen Zeichen" mekert nur EMBT bei der Bereitstellung der Datei. Somit würde ich mal behaupten, dass das ein Problem von EMBT ist.


Nun hatte ich die Idee, dass ich die Textdateien in eine selbst programmierte Zip-Datei packe und diese dann beim ersten Start der App entpacke.
Nur wie wir schon wissen, gibt es der Zeit keine Zip-Datei für Android und bei der Erstellung einer eigenen Zip-Datei bin ich auch gescheitert.
Hätte da jemand eine gute Idee, wie ich das verwirklichen könnte?

Union 23. Feb 2014 11:50

AW: Dateiname mit Umlaut in Android
 
Das mit den Umlauten ist wegen Einschränkungen des Android SDK nicht möglich. Das einzige was man Embt hier vorwerfen kann, ist dass der Deployment Manager das Hinzufügen solcher Dateien nicht bereits verhindert.
Du könntest aber die Datei konventionsgemaess hinzufügen und diese dann im StartupCopy umbenennen.

[Edit]
Wieso sollte es keine Zip-Datei für Android geben?
Delphi-Quellcode:
uses IOUtils, System.Zip;
...
TZipFile.ExtractZipFile(TPath.Combine(TPath.GetDocumentsPath), 'bereitgestelltezipdateiohneumlauteimdateinamen.zip'), TPath.GetDocumentsPath);
Packt die angegebene Datei aus, auch mit UTF8-Dateinamen.
[/Edit]

SaBaN 25. Feb 2014 07:37

AW: Dateiname mit Umlaut in Android
 
Danke dir Union! das ist der Tip was ich gesucht habe, funktioniert einwandfrei beim Android und IOS(simulator).

Ich hatte da noch eine frage mit dem Dateinamen und Umlauten, uns war Ich durchsuche mit GetFiles die Dateien.
Wenn ich in die Eingabefeld einen Ascii(oder Ansi wie auch immer) wert eingebe, dann unterscheidet GetFiles Groß u. Klein nicht.
Aber wenn ich eine Buchstabe mit Umlauten eingebe dann unterscheidet sich.
z.B. wenn ich "m" eingebe dann wird sowohl müller.txt auch MÜLLER.TXT gefunden, wenn man aber "mü" eingibt dann wird nur müller.txt gefunden.
Gibtes da eine andere methoden zum durchsuchen, oder mache ich was falsch. Sonst werde ich alle dateien(knapp über 2000) auf kleinbuchstaben umändern, die aber nicht das Problem ist.

Delphi-Quellcode:
...
FilesList := TDirectory.GetFiles(Pfad, FileName+'*.txt', TSearchOption.soTopDirectoryOnly);
for Loop := 0 to High(FilesList) do
  TListBox(Sender).Items.Add(ExtractFileName(ChangeFileExt(FilesList[Loop], '')));
mfg
Saban

arnof 25. Feb 2014 07:52

AW: Dateiname mit Umlaut in Android
 
Zitat:

Zitat von arnof (Beitrag 1248230)
Lösung:

Mueller.txt

Aber man beachte das ist ein linuxbasierendes Betriebssystem, d.h. Neben sämtlichen Umlauten noch auf Groß und Kleinschreibung der Dateien achten!


Lade alle Filenamen in deine Listbox und suche dort nach MÜ....

SaBaN 25. Feb 2014 08:43

AW: Dateiname mit Umlaut in Android
 
Ja das habe ich mir auch gedacht, aber beim jeden start das in die Listbox hinzufügen und prüefen ob der User eine neue datei hingezufügt hat ist bissen umständlich.
Das "Komische" ist Groß- und Klein schreibung wird bei Ansi nicht beachtet nur bei Umlauten.
Werde wohl alle Datein in Kleinbuchstaben umwandeln.
Danke dir!

Union 25. Feb 2014 10:55

AW: Dateiname mit Umlaut in Android
 
Was willst Du damit eigentlich bezwecken mit dieser Prüfung?

SaBaN 25. Feb 2014 16:08

AW: Dateiname mit Umlaut in Android
 
Also ich dachte beim ersten start des App, soll alle Dateien in einer Listbox ausgelesen und in einer Datei gespeichert damit der Startvorgang beim nächsten mal bei
ungefähr 2000 Dateien nicht so lange dauert. Beim jeden nächsten start des App muss wieder überprüft werden, ob der User neuen Datei hinzugefügt hat oder nicht oder sogar einige Dateien gelöscht hat.
Also wieder auslesen und wieder in einer Datei schreiben usw. und das beim jeden Start, das schien mir etwas umständlich zu seien.
So wird der Startvorgang des Apps schwer beeinträchtigt, oder denke ich mir falsch.

Union 25. Feb 2014 16:25

AW: Dateiname mit Umlaut in Android
 
Wieso packst Du die Dateien beim ersten App-Start nicht in ein anderes Verzeichnis? Dann befinden sich im Dokument-Ordner nur die vom Benutzer hinzugefügten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz