standardadditions を使用してテキストファイルを作成すると、明らかにパラメーター バッグでエンコーディングを構成できます。AppleScript では «class utf8» と書きますが、JXA ではどの値を使用するのでしょうか? 文字列「UTF8」、「utf8」、「class utf8」を試しましたが成功しませんでした。エラーは常に「エラー: タイプを変換できません。(-1700)」です。「テキスト」を使用すると、ファイルは MACROMAN で書き込まれます。
以下のスタンドアロンの例:
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);
}
};
}
fooの答えの後の追加:
ドキュメントの関連する段落を読みましたhttps://developer.apple.com/library/mac/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/index.html#//apple_ref/doc/uid/TP40014508-CH109-SW17
と
代わりに ObjectiveC ブリッジを使用します。この例は機能します
str = $.NSString.alloc.initWithUTF8String('foo')
str.writeToFileAtomically('/tmp/foo', true)
私が正しく理解していれば、ブリッジ内での ObjectiveC メソッドの命名規則 (コロンを削除し、キャメルケースを追加する) により、次の例は機能するはずですが、機能しません。ファイルは書き込まれておらず、戻り値は false です。
str = $.NSString.alloc.initWithUTF8String('foo')
str.writeToFileAtomicallyEncodingError('/tmp/foo', true, 'UTF-8', null);
私は何を間違えたのですか?適切な Errorhandler を 4 番目のパラメーターとして渡す方法と、3 番目のパラメーターに適切な値があるかどうかさえわかりません。