JXA で NSString から直接 UTF-8 でファイルに保存する方法が見つかった。
utf 8 – JXA: Set UTF-8 encoding when writing files – Stack Overflow
$("苗ちゃん").writeToFileAtomicallyEncodingError // OK
$("苗ちゃん").writeToFileAtomicallyEncoding // NG
下ではエラーなので今まで不可能だと思っていたけど。
throws つまり例外付き関数の場合は Error を最後に付けるようだ。
write(toFile:atomically:encoding:) – NSString | Apple Developer Documentation
Objective-C からの変換にこんな罠があったとは。
キーワードの先頭を大文字にしてくっつけるだけでは駄目な場合もある。
覚書ページの書き換えをしなきゃいけないな。
ついでにディレクトリの作成なんかもやってみる。
#!/usr/bin/osascript
ObjC.import("Cocoa");
let nil = $();
let newDir = $("新規ディレクトリ");
let newFile = $("nae.txt");
let nae = $("苗ちゃんカワイイ\nなでなでしたい")
let fm = $.NSFileManager.defaultManager;
// Create Directory
fm.createDirectoryAtPathWithIntermediateDirectoriesAttributesError(newDir, false, nil, nil);
// Exist?
if (fm.fileExistsAtPath(newDir)) {
console.log("Exists");
}
// Directory?
let ref = Ref();
if (fm.fileExistsAtPathIsDirectory(newDir, ref)) {
if (ref[0])
console.log("is Directory");
}
// Change Current Directory
fm.changeCurrentDirectoryPath(newDir);
console.log(fm.currentDirectoryPath.js);
// Ceate Text File
let res = nae.writeToFileAtomicallyEncodingError(newFile, true, $.NSUTF8StringEncoding, nil);
if (res) {
console.log("Write Success!");
}
Ref については公式に解説があるから解ると思う。
PyGtk をパクった Gjs のようにタプルで戻してくれると楽なんだけーが。
って C# とかに慣れているならコッチのほうが理解しやすいかも。