[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Umlaute in Dateinamen (Mac) lassen sich nicht per Skript verwenden?

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

Umlaute in Dateinamen (Mac) lassen sich nicht per Skript verwenden?

pixxxelschubser
Beiträge gesamt: 1697

17. Feb 2011, 07:11
Beitrag # 1 von 7
Bewertung:
(4372 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
(Das ist eigentlich ein Illustrator-Skripting-Thread.) Allerdings sitzen hier die meisten fähigen Skripter und das Problem dürfte eigentlich nicht unbekannt sein. Ich bin mir auch fast sicher, hier schon etwas darüber gelesen zu haben, aber meine Suche hat leider keinen Treffer gebracht.

folgender Skriptschnipsel:
Code
#target illustrator 
var aDoc =app.activeDocument;
var docname = aDoc.name;
//alert(docname);
var myLayer = aDoc.layers.add();
var aText = myLayer.textFrames.add();
aText.textRange.characterAttributes.size = 16;
aText.textRange.characterAttributes.textFont = textFonts.getByName("MyriadPro-Bold");
aText.contents = docname //+" ("+heute+" "+jetzt+")"; //---Zusätze werden extra berechnet
//aText.left = mX; //---Dateiabhängige Position
//aText.top = mY; //---Dateiabhängige Position


soll eigentlich (unter anderem) den Dateinamen von Dateien Dritter (leider auch auch mit Umlauten) mit in die Datei schreiben. Das funktioniert problemlos unter Windows in allen CS-Versionen.

Auf dem Mac wird der Dateiname (auch mit Umlauten) zwar mit dem eingebauten Alert odentlich angezeigt, aber in der Datei kommen die Umlaute nicht an. Vollkommen unabhängig, welche Schrift verwendet wird.

Liegt das eventuell am Encoding oder wie kann man dem Skript beibringen, plattformunabhängig mit Dateinamen zu arbeiten, auch wenn dieser Umlaute enthält?
X

Umlaute in Dateinamen (Mac) lassen sich nicht per Skript verwenden?

Martin Fischer
  
Beiträge gesamt: 12691

17. Feb 2011, 08:11
Beitrag # 2 von 7
Beitrag ID: #465026
Bewertung:
(4366 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans-Jürgen,

auf dem Mac kommen die Umlaute als kombinierte Zeichen an.
'ä' = 'a' + \u0308

Deswegen behelfe ich mir mit der Funktion cleanupUmlaut(), um daraus die entsprechenden Unicode-Zeichen zu erzeugen.

Code
var d = app.documents.firstItem();   
var t = d.textFrames.add({geometricBounds:[10,10,50,50], contents:cleanupUmlaut(d.name)})

// --------------------------------------------------------------------------------
// cleanupUmlaut()
// --------------------------------------------------------------------------------

function cleanupUmlaut (theString) {
var newString = theString
.replace( /a\u0308/g, 'ä' )
.replace( /o\u0308/g, 'ö' )
.replace( /u\u0308/g, 'ü' )
.replace( /A\u0308/g, 'Ä' )
.replace( /O\u0308/g, 'Ö' )
.replace( /U\u0308/g, 'Ü' );
return newString;
}



Siehe auch »Textdatei Importoption Zeichensatz Unicode«.


Darüberhinaus gibt es noch die Funktionen File.encode() und File.decode().
Code
decode() 
File.decode (uri)
uri String. The encoded string to decode. All special characters must be encoded in
UTF-8 and stored as escaped characters starting with the percent sign followed by
two hexadecimal digits. For example, the string "my%20file" is decoded as "my
file".
Special characters are those with a numeric value greater than 127, except the
following:
/ - _ . ! ~ * ' ( )
Decodes the specified string as required by RFC 2396.
Returns the decoded string.

encode()
File.encode (name)
name String. The string to encode.
Encodes the specified string as required by RFC 2396. All special characters are encoded in UTF-8
and stored as escaped characters starting with the percent sign followed by two hexadecimal digits.
For example, the string "my file" is encoded as "my%20file".
Special characters are those with a numeric value greater than 127, except the following:
/ - _ . ! ~ * ' ( )
Returns the encoded string.


Vielleicht lässt sich damit was anfangen.


als Antwort auf: [#465025]
(Dieser Beitrag wurde von Martin Fischer am 18. Feb 2011, 09:16 geändert)

Umlaute in Dateinamen (Mac) lassen sich nicht per Skript verwenden?

pixxxelschubser
Beiträge gesamt: 1697

17. Feb 2011, 22:54
Beitrag # 3 von 7
Beitrag ID: #465118
Bewertung:
(4299 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat auf dem Mac kommen die Umlaute als kombinierte Zeichen an.
'ä' = 'a' + \u0308


Hallo Martin,
vielen Dank erstmal für diese sehr nützlichen Informationen. Du hast meine Vermutung vollauf bestätigt, da die Umlaute auch nicht per Skript ansprechbar waren und es wohl keinerlei Einstellmöglichkeiten auf dem Mac zu geben scheint.

Und ja, genau diesen Thread (Textdatei Importoption Zeichensatz Unicode) hatte ich gemeint. Ich werde dir Nachricht geben, ob und wie ich dein Skript in Illu verwenden konnte. (leider habe ich zu Hause keinen Mac zum Testen und im Geschäft häuft sich die Arbeit). Ich melde mich auf jeden Fall wieder.
Vielen Dank erst einmal.


als Antwort auf: [#465026]

Umlaute in Dateinamen (Mac) lassen sich nicht per Skript verwenden?

pixxxelschubser
Beiträge gesamt: 1697

21. Feb 2011, 22:40
Beitrag # 4 von 7
Beitrag ID: #465350
Bewertung:
(4237 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,
ich konnte heute deinen Skriptschnipsel erfolgreich in Illu CS5 einbauen und testen. Jetzt wird der Dateiname korrekt übernommen. Lediglich die Syntax für die Zeichen musste geändert werden, da ich das Skript sowohl unter Windows als auch unter Mac weiter bearbeite (und so zerhaut es mir nicht immer sämtliche Umlaute und Sonderzeichen im Skript selbst).
Zusätzlich habe ich noch eine „Betriebssystemweiche“ eingebaut. Sie ist für den Umlautwechsel nicht zwingend notwendig, wird aber ohnehin an anderer Stelle im Skript noch mehrmals verwendet.

Code
#target Illustrator 

var aDoc =app.activeDocument;
var docname = aDoc.name;
var myLayer = aDoc.layers.add();
myLayer.name = "Beschriftung";
var aText = myLayer.textFrames.add();
var aSize = 20;
//var bcdefSize =12;

with (aText) {
textRange.characterAttributes.textFont = textFonts.getByName("MyriadPro-Bold");
textRange.characterAttributes.size = aSize;
if ( IsMacintoshOS() ) { // alert('kein Windows');
contents = cleanupUmlaut(); //+" ("+heute+" "+jetzt+")"; //---Zusaetze werden extra berechnet
} else {
contents = docname; //+" ("+heute+" "+jetzt+")";
}
left = mX; //---Dateiabhaengige Position
top = mY; //---Dateiabhaengige Position
}
// --------------------------------------------------------------------------
// cleanupUmlaut()
// --------------------------------------------------------------------------
function cleanupUmlaut() {
dn = docname;
dn = dn.replace( /a\u0308/g, '\u00e4' ); //ae
dn = dn.replace( /o\u0308/g, '\u00f6' ); //oe
dn = dn.replace( /u\u0308/g, '\u00fc' ); //ue
dn = dn.replace( /A\u0308/g, '\u00c4' ); //AE
dn = dn.replace( /O\u0308/g, '\u00dc' ); //OE
dn = dn.replace( /U\u0308/g, '\u00d6' ); //UE
return dn;
}
// --------------------------------------------------------------------------
// IsMacintoshOs() Betriebssystemweiche
// --------------------------------------------------------------------------
function IsMacintoshOS() {
if ( $.os.search(/macintosh/i) != -1 ) {
return true;
} else {
return false;
}
}


Also vielen Dank noch einmal für die gewohnt professionelle und zeitnahe Hilfe.

Wink


als Antwort auf: [#465118]

Umlaute in Dateinamen (Mac) lassen sich nicht per Skript verwenden?

Martin Fischer
  
Beiträge gesamt: 12691

21. Feb 2011, 23:02
Beitrag # 5 von 7
Beitrag ID: #465351
Bewertung:
(4231 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans-Jürgen,

Deine Umschreibung der Umlaute gefällt mir.
Die werde ich gerne übernehmen.


als Antwort auf: [#465350]

Umlaute in Dateinamen (Mac) lassen sich nicht per Skript verwenden?

pixxxelschubser
Beiträge gesamt: 1697

21. Feb 2011, 23:12
Beitrag # 6 von 7
Beitrag ID: #465352
Bewertung:
(4228 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Das freut mich.

Smile


als Antwort auf: [#465351]

Umlaute in Dateinamen (Mac) lassen sich nicht per Skript verwenden?

pixxxelschubser
Beiträge gesamt: 1697

30. Mär 2011, 00:25
Beitrag # 7 von 7
Beitrag ID: #467948
Bewertung:
(3916 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Leider hat sich der Fehlerteufel eingeschlichen.

Die Zeilen:
dn = dn.replace( /O\u0308/g, '\u00dc' ); //OE
dn = dn.replace( /U\u0308/g, '\u00d6' ); //UE
müsen wie folgt lauten:
Code
	dn = dn.replace( /O\u0308/g, '\u00d6' ); //OE    
dn = dn.replace( /U\u0308/g, '\u00dc' ); //UE



als Antwort auf: [#465352]
X