[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Encodingdifferenzen zwischen Filesystem und javascript prompt

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Encodingdifferenzen zwischen Filesystem und javascript prompt

J.Puff
Beiträge gesamt: 240

5. Mai 2012, 13:19
Beitrag # 1 von 12
Bewertung:
(5639 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo gemeinsam,
ich finde keine Lösung zu folgendem Problem:

Aus einem MacOS Filesystem werden Dateinamen mit Hilfe von .getFiles() und _file.displayName in eine Array geschrieben:
Datei1, Datei2, ÄtzendeDatei ....

Der User hat nun die Möglichkeit den Namen für eine anzulegende Datei via javascript prompt einzugeben. Eine Funktion prüft ob ein gewünschter Dateiname bereist existiert.

Und hier begint das Problem:
Kommen Umlaute vor gibt es Differenzen, die mit encode() sichtbar werden:
prompt: %C3%84tzendeDatei
Dateiname: A%CC%88tzendeDatei

Damit ist es nicht mehr möglich auf Gleichheit zu prüfen.

Dank für eine Lösungsidee!
Johannes
X

Encodingdifferenzen zwischen Filesystem und javascript prompt

WernerPerplies
Beiträge gesamt: 2817

5. Mai 2012, 13:39
Beitrag # 2 von 12
Beitrag ID: #494484
Bewertung:
(5624 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Johannes,

hast den Dateinamen schon mal mit dem Fileobject umgewandelt?

Siehe auch
http://www.hilfdirselbst.ch/..._P494130.html#494130


als Antwort auf: [#494483]

Encodingdifferenzen zwischen Filesystem und javascript prompt

J.Puff
Beiträge gesamt: 240

5. Mai 2012, 14:00
Beitrag # 3 von 12
Beitrag ID: #494485
Bewertung:
(5607 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,
danke für den Tipp, habe es ausprobiert, nur leider habe ich immer noch die Differenz der Umlaut-Codierung zwischen prompt und filename.

Noch eine Idee?
Johannes


als Antwort auf: [#494484]

Encodingdifferenzen zwischen Filesystem und javascript prompt

WernerPerplies
Beiträge gesamt: 2817

5. Mai 2012, 14:13
Beitrag # 4 von 12
Beitrag ID: #494486
Bewertung:
(5595 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Joahannes,

irgndwie verstehe ich Dein Problem nicht.

1. Dateinamen lasse ich vom Anwender nur über FileOpen/Fileclosedialoge eingeben, die auch die Existenz einer Datei prüfen.
2. Für selbsterzeugte Dateinamen verwende ich immer das Fileobject und teste die Existenz der Datei mit File(Dateiname).exists.

Das hat bei mir immer geklappt.

Mit meinem Skript
WpsReadFilePathes
kannst Du Dateinamen laden und in den verschiedenen Varianten in einer 'Textdatei abspeichern.

Gibt es die Unterschiede da auch?

Ergänzung:

Du hast wirklich Folgendes gemacht?

Zitat var filePrompt = new File(promptEinegabe);
var fileArrayElement = new File(Array[0]);
alert ((filePrompt.fullName == fileArrayElement.fullName));


und das ist wirklich unterschiedlich bei gleichen Dateinamen mit Umlauten?


als Antwort auf: [#494485]
(Dieser Beitrag wurde von WernerPerplies am 5. Mai 2012, 14:21 geändert)

Encodingdifferenzen zwischen Filesystem und javascript prompt

J.Puff
Beiträge gesamt: 240

5. Mai 2012, 14:22
Beitrag # 5 von 12
Beitrag ID: #494487
Bewertung:
(5592 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,
danke für die Erläuterung, aber vielleicht liegt das Problem ja gar nicht bei den Dateinamen, sondern beim javascript-Befehl prompt.

Beispiel:
Code
var _name = prompt('Bitte geben Sie einen Namen ein:', ''); 

Wird hier z.B. "Ätzend" eingegeben und ich vergleiche nun die Einträge eines Arrays mit Dateinamen darauf hin, ob es "Ätzend" dort auch gibt, bekomme ich keinen Treffer. Weil das "Ä" anders aus dem prompt herauskommt, als das "Ä" im Dateinamens des Array steht!

Ergänzung:
Es geht um einen Vergleich von Datenamen als Strings. Nicht um FileObjects.


als Antwort auf: [#494486]
(Dieser Beitrag wurde von J.Puff am 5. Mai 2012, 14:27 geändert)

Encodingdifferenzen zwischen Filesystem und javascript prompt

WernerPerplies
Beiträge gesamt: 2817

5. Mai 2012, 14:33
Beitrag # 6 von 12
Beitrag ID: #494488
Bewertung:
(5571 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Johannes,

Zitat Es geht um einen Vergleich von Datenamen als Strings. Nicht um FileObjects.


Das war mir völlig klar,
File(dateiName).fullName ist ein String.

Also noch einmal:

Wie sieht dieser Dateiname aus:
new File(Promptrückgabe).fullName?


als Antwort auf: [#494487]

Encodingdifferenzen zwischen Filesystem und javascript prompt

J.Puff
Beiträge gesamt: 240

5. Mai 2012, 14:45
Beitrag # 7 von 12
Beitrag ID: #494490
Bewertung:
(5564 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Nicht anders als die Ausgabe vom Prompt:
Code
var filePrompt = new File(_folderPath+'/'+_profileName); 
alert(filePrompt.name);

ergibt: %C3%84tzend

dagegen ergibt
Code
_folderContent = _folder.getFiles(); 
for(var _numFiles=0; _numFiles<_folderContent.length; _numFiles++)
{
alert(_folderContent[_numFiles].displayName.replace('.txt', '')));
}

A%CC%88tzend

Und das ist nicht identisch! Auch nicht, wenn ich statt displayName nur name verwende.


als Antwort auf: [#494488]

Encodingdifferenzen zwischen Filesystem und javascript prompt

WernerPerplies
Beiträge gesamt: 2817

5. Mai 2012, 15:43
Beitrag # 8 von 12
Beitrag ID: #494492
Bewertung:
(5499 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Johannes,

jetzt mal eine ganz vorsichtige Frage:

Bist Du sicher, dass am Prompt wirklich ein Ä eingegeben wurde?

%C3%84 -> ist wirklich die Codierung von einem "Ä",

%CC%88 -> ist die Codierung für ¨

daraus ergibt sich, dass bei der zweiten Codierung drei Zeichen für den Umlaut verwendet werden.

Kopiere doch mal ein Ä aus einem anderen Programm in die Prompteingabe.

Das Fileobject erzeugt bei mir also völlig korrekt zwei unterschiedliche Namen:
Code
File("%C3%84tzend").fullName 
--> ~/Eigene Dateien/Ätzend

File("A%CC%88tzend").fullName
--> ~/Eigene Dateien/A¨tzend



als Antwort auf: [#494490]

Encodingdifferenzen zwischen Filesystem und javascript prompt

Martin Fischer
  
Beiträge gesamt: 12885

5. Mai 2012, 15:50
Beitrag # 9 von 12
Beitrag ID: #494493
Bewertung:
(5490 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Das 'Ä' vom Prompt ist schon richtig.
Es ist das Filesystem vom Mac, das ein 'Ä' als 'A' + Diaresis (querliegender Doppelpunkt) liefert.

Siehe auch andere Beiträge zu dieser Zerstückelung von Umlauten in Vokal und Diaresis.


als Antwort auf: [#494492]

Encodingdifferenzen zwischen Filesystem und javascript prompt

J.Puff
Beiträge gesamt: 240

5. Mai 2012, 19:45
Beitrag # 10 von 12
Beitrag ID: #494498
Bewertung:
(5405 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Abend Martin,
mit Deiner String.prototype.cleanUmlaut = function () kann ich das Problem lösen, danke für den Tipp!

Schönes Wochenende noch
Johannes


als Antwort auf: [#494493]

Encodingdifferenzen zwischen Filesystem und javascript prompt

Uwe Laubender
Beiträge gesamt: 5350

5. Mai 2012, 20:19
Beitrag # 11 von 12
Beitrag ID: #494500
Bewertung:
(5390 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Johannes!

Nur ergänzend zu dem, was eh' schon hier im Thread besprochen wurde:

Code
var myString = "ätzend"; 
$.writeln(myString)

var encodedURIString = encodeURI(myString);
$.writeln(encodedURIString);

var decodedURIString = decodeURI(encodedURIString);
$.writeln(decodedURIString);


Zu finden unter:

Class
global
The global methods and properties for ExtendScript.

Methods

string encodeURI (text: string)

Encodes a string after RFC2396.

Create an UTF-8 ASCII encoded version of this string. The string is converted into UTF-8. Every non-alphanumeric character is encoded as a percent escape character of the form %xx, where xx is the hex value of the character. After the conversion to UTF-8 encoding and escaping, it is guaranteed that the string does not contain characters codes greater than 127. The list of characters not to be encoded is -_.!~*'();/?:@&=+$,#. The method returns false on errors.

string decodeURI (uri: string)
Decodes a string created with encodeURI().


als Antwort auf: [#494498]

Encodingdifferenzen zwischen Filesystem und javascript prompt

WernerPerplies
Beiträge gesamt: 2817

6. Mai 2012, 07:40
Beitrag # 12 von 12
Beitrag ID: #494507
Bewertung:
(5313 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Johannes,

auch wenn Dein Problem jetzt gelöst ist, hätte ich noch eine Bitte an Dich, da ich hier keinen Mac habe:

Könnte Du bitte für mich Folgendes auslesen:

Code
_folderContent = _folder.getFiles();  
for(var _numFiles=0; _numFiles<_folderContent.length; _numFiles++)
{
alert(_folderContent[_numFiles].fsName);
}
for(var _numFiles=0; _numFiles<_folderContent.length; _numFiles++)
{
alert(_folderContent[_numFiles].fullName);
}


Ach ja, eventuell musst Du die CleanUmlaut-Methode noch um weitere Sonderzeichen ergänzen.


als Antwort auf: [#494498]
X