JXA:写入文件时设置UTF-8编码
如果我使用standardadditions编写文本文件,我显然可以在参数包中配置编码。在AppleScript中我会写«类utf8»,但在JXA中使用哪个值呢? 我尝试了字符串“UTF8”、“UTF8”、“class UTF8”,但没有成功。错误总是:“错误:无法转换类型。(-1700)”。如果我使用“文本”,文件是用MACROMAN编写的 独立示例如下:JXA:写入文件时设置UTF-8编码,utf-8,applescript,osx-yosemite,javascript-automation,Utf 8,Applescript,Osx Yosemite,Javascript Automation,如果我使用standardadditions编写文本文件,我显然可以在参数包中配置编码。在AppleScript中我会写«类utf8»,但在JXA中使用哪个值呢? 我尝试了字符串“UTF8”、“UTF8”、“class UTF8”,但没有成功。错误总是:“错误:无法转换类型。(-1700)”。如果我使用“文本”,文件是用MACROMAN编写的 独立示例如下: var exportFileWriter = fileWriter('/Users/norman/mini.txt'); exportFi
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的回答后添加:
我阅读了文件中的相关段落
及
:
改为使用Objective桥。这个例子有效
str = $.NSString.alloc.initWithUTF8String('foo')
str.writeToFileAtomically('/tmp/foo', true)
如果我理解正确,下面的示例应该可以工作,因为有一个惯例,就是Objective方法在桥中的命名方式(删除冒号,添加camelcase),但它不能。未写入任何文件,返回值为false
str = $.NSString.alloc.initWithUTF8String('foo')
str.writeToFileAtomicallyEncodingError('/tmp/foo', true, 'UTF-8', null);
我做错了什么?我甚至不知道如何将正确的Errorhandler作为第四个参数传递,以及第三个参数是否具有正确的值。JXA的Apple事件桥存在许多缺陷和缺失的功能(例如,使用原始AE代码的能力)。用它的ObjC桥代替;请参见
-[NSString writeToFile:atomicaly:encoding:error:][/code>请重试
str = $.NSString.alloc.initWithUTF8String('foo');
str.writeToFileAtomicallyEncodingError('/tmp/foo', true, $.NSUTF8StringEncoding, null);
在这里工作!NSString文档中列出了可用的编码(请参见您的链接)
迈克尔/汉堡,祝您愉快谢谢您的意见。我阅读了一些文档,编辑了我的问题,并添加了一些简单的例子。快来吧!我刚刚发布了同样的答案,这对我也很有用。谢谢。它工作得很好。如果我有足够的声誉,我会投票支持你和福的回答。在foo提出ObjC桥之前,我的解决方法是使用node.js并要求“encoding”:encoding.convert(数据“UTF-8”、“MACROMAN”);汉堡是一个富有的国家。