2013-07-14 22 views
0

下面的块是NSAppleEventDescriptorNSData表示NSAppleEventDescriptor作为返回调用NSAppleScript。 什么是NSData块的编码,我应该如何将其转换为NSString 数据NSAppleEventDescriptor编码

< 646c6532 00000000 6c697374 00000174 00000000 00000000 00000018 6c697374 0000000C 00000000 75747874 00000008 0068006f 006d0065 75747874 0000001a 00540065 006d0070 00390033 00370033 00360030 00360031 00367574 78740000 001a0054 0065006d 00700032 00300037 00370030 00390033 00310033 75747874 00000018 00540065 006d0070 00390038 00380039 00340038 00310037 75747874 0000001a 00540065 006d0070 00330033 00350032 003 90030 00300031 00397574 78740000 001a0054 0065006d 00700035 00310039 00380039 00380030 00300032 75747874 0000001a 00540065 006d0070 00330030 00300036 00310038 00320031 00387574 78740000 000a0044 00610076 00690064 75747874 00000010 0055006e 00740069 0074006c 00650064 75747874 0000000C 00700067 00690073 00680061 75747874 0000001a 00540065 006d0070 00380038 00390038 00370038 00330034 00357574 78740000 001a0054 0065006d 00700035 00380038 00360038 00320035 00300037>

非常感谢,大卫

+0

通常您将NSAppleEventDescriptor转换回等效的objective-c对象。例如,一个苹果脚本字符串可以转换为NSString。列表到数组,记录到字典等。所以你需要告诉我们更多关于苹果脚本和从苹果脚本返回的东西,然后才能提供帮助。 – regulus6633

回答

0

使用-[NSAppleEventDescriptor stringValue] - 如果AEDesc不是已经存在的并将其解压为NSString(或者如果不能被强制返回nil),则强制AEDesc输入unnicodeText。

除非您需要解码NSAppleEventDescriptor没有提供便利包/解包方法的AE类型之一(例如typeLongDateTime),否则您不应该在-[NSAppleEventDescriptor data]左右徘徊,但这种方式的疯狂在于。

如果您的AppleScript代码是应用程序的一部分而不是用户提供的脚本,请考虑使用AppleScript-ObjC而不是NSAppleScript。像PyObjC和RubyCocoa一样,ASOC使得AppleScript脚本对象作为常规的Cocoa类和实例出现在程序的其余部分,并且在跨越桥时自动将常见AS值转换为Cocoa等效值,因此使用起来更容易和更强大。

+0

事实证明,该块是编码编码:NSUTF16LittleEndianStringEncoding,这是有道理的,因为Mac使用英特尔处理器。很多,谢谢,大卫 –

+0

你正在做一个完全不安全的假设。 Apple事件管理器为_several_ Unicode编码(UTF8,UTF16BE,UTF16LE)定义描述符类型,以及一些非Unicode遗留编码。再次,不要混淆-data方法。使用-stringValue获取NSString,因为它将为您执行所有必要的类型检查和转换。在像AEM这样的弱动态类型系统中,收件人代码有责任将返回的值强制转换为实际需要的类型,而不是对其原始类型进行盲目的假设。 – foo

+0

我会检查我的代码。非常感谢,大卫 –