Jeśli napiszę plik tekstowy przy użyciu standardowych wersji, oczywiście mogę skonfigurować kodowanie w torbie parametrów. W AppleScript napisałbym "class utf8", ale jaką wartość użyć w JXA? Próbowałem ciągi "UTF8", "utf8", "class utf8" bez powodzenia. Błąd jest zawsze: "Błąd: nie można dokonać konwersji typów (-1700)". Jeśli użyję "tekstu", plik zostanie zapisany w MACROMAN.JXA: Ustaw kodowanie UTF-8 podczas zapisywania plików
Samodzielny przykład poniżej:
var exportFileWriter = fileWriter('/Users/norman/mini.txt');
exportFileWriter.write('äöü');
exportFileWriter.close();
function fileWriter(pathAsString) {
'use strict';
var app = Application.currentApplication();
app.includeStandardAdditions = true;
var path = Path(pathAsString);
var file = app.openForAccess(path, {writePermission: true});
/* reset file length */
app.setEof(file, {to: 0});
return {
write: function(content) {
/* How can I write UTF-8? */
app.write(content, {to: file, as: 'text'});
},
close: function() {
app.closeAccess(file);
}
};
}
Dodanie po Foo za odpowiedź:
Czytam odpowiednich akapitów w dokumentacji https://developer.apple.com/library/mac/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/index.html#//apple_ref/doc/uid/TP40014508-CH109-SW17
i
korzystaniaZamiast tego używaj mostu ObjectiveC. Ten przykład działa
str = $.NSString.alloc.initWithUTF8String('foo')
str.writeToFileAtomically('/tmp/foo', true)
Jeśli dobrze rozumiem, to poniższy przykład powinien działać, ze względu na konwencję jak ObjectiveC Metody są nazywane w mostku (usunięcie jelita grubego, dodać CamelCase), ale tak nie jest. Żaden plik nie został zapisany, a wartość zwracana jest fałszywa.
str = $.NSString.alloc.initWithUTF8String('foo')
str.writeToFileAtomicallyEncodingError('/tmp/foo', true, 'UTF-8', null);
Co mi się nie podobało? Nie wiem nawet, jak przekazać odpowiedni Errorhandler jako parametr czwarty i czy trzeci parametr ma poprawną wartość.
Dziękuję za Twój wkład. Przeczytałem dokumentację, zredagowałem moje pytanie i dodałem kilka minimalnych przykładów. – nwehrle