nwe*_*rle 7 applescript utf-8 osx-yosemite javascript-automation
如果我使用standardadditions编写文本文件,我显然可以在参数包中配置编码.在AppleScript中,我会编写«class utf8»但在JXA中使用哪个值?我试过Strings"UTF8","utf8","class utf8"但没有成功.错误总是:"错误:无法转换类型.( - 1700)".如果我使用"text",则该文件是用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);
}
};
}
Run Code Online (Sandbox Code Playgroud)
在foo回答后添加:
和
改为使用ObjectiveC桥.这个例子有效
str = $.NSString.alloc.initWithUTF8String('foo')
str.writeToFileAtomically('/tmp/foo', true)
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,下面的例子应该可行,因为约定如何在桥中命名ObjectiveC方法(删除冒号,添加camelcase),但事实并非如此.没有写入文件且返回值为false.
str = $.NSString.alloc.initWithUTF8String('foo')
str.writeToFileAtomicallyEncodingError('/tmp/foo', true, 'UTF-8', null);
Run Code Online (Sandbox Code Playgroud)
我错了什么?我甚至不知道如何传递一个正确的Errorhandler作为第四个参数,如果第三个参数具有正确的值.
请试试
str = $.NSString.alloc.initWithUTF8String('foo');
str.writeToFileAtomicallyEncodingError('/tmp/foo', true, $.NSUTF8StringEncoding, null);
Run Code Online (Sandbox Code Playgroud)
在这里工作!可用的编码列在NSString文档中(请参阅您的链接)!
享受,迈克尔/汉堡
JXA 的 Apple 事件桥存在缺陷,存在许多残缺和缺失的功能(例如使用原始 AE 代码的能力)。使用它的 ObjC 桥来代替;看-[NSString writeToFile:atomically:encoding:error:]
。
归档时间: |
|
查看次数: |
1040 次 |
最近记录: |