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# とかに慣れているならコッチのほうが理解しやすいかも。