首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PerlObjCBridge从字符串读取plist的更好方法(由于错误的NSStringEncoding值0x0000编码错误)?

PerlObjCBridge从字符串读取plist的更好方法(由于错误的NSStringEncoding值0x0000编码错误)?
EN

Stack Overflow用户
提问于 2012-01-11 01:02:23
回答 1查看 519关注 0票数 1

这段代码是一个应该可以在任何Mac系统上运行的示例。

代码语言:javascript
复制
   #!/usr/bin/perl
use Foundation;
my $dscl = "/usr/bin/dscl";

sub getGeneratedUID(){
  my $name = shift;
  my $command = "$dscl -plist . -read /Users/$name GeneratedUID";
  print "$command\n";
  my $output = `$command`;
  my $plist = NSString->alloc()->initWithCString_encoding_($output,NSStringEncodingASCII);
  my $data = $plist->dataUsingEncoding_(NSStringEncodingASCII);
  my $record = NSPropertyListSerialization->propertyListWithData_options_format_error_($data,NSPropertyListImmutable,0,0);
  my $array = $record->objectForKey_('dsAttrTypeStandard:GeneratedUID');
  return $array->objectAtIndex_(0)->description()->UTF8String();
}
my $logname = $ENV{'LOGNAME'};
my $guid = &getGeneratedUID($logname);
print "My GUID: $guid\n";

因此,我正在为Mac目录服务命令行(dscl)实用程序编写一个perl包装器。由于站点的要求,它必须是perl,并且由于这个命令多年来略微改变了它的输出,所以我使用它的功能将其输出格式化为Apple适当的列表。多年来,我在其他几种语言中使用过NSPropertyListSerialization->propertyListWithData,一般的想法是,如果您将字符串转换为数据,将从字符串创建一个NSDictionary,因此问题的标题是,是否有更好的方法来解析plist输出。到目前为止,这段代码工作正常,但它确实给出了以下错误:

代码语言:javascript
复制
2012-01-10 10:57:31.270 perl5.12[1876:1507] Incorrect NSStringEncoding value 0x0000 detected. Assuming NSASCIIStringEncoding. Will stop this compatiblity mapping behavior in the near future.

我在谷歌上发现了这句话

代码语言:javascript
复制
  my $plist = NSString->alloc()->initWithCString_encoding_($output,NSStringEncodingASCII);

因此,如果我能找出编码错误,那么我认为这种方式对我来说工作得很好,但如果你有更好的建议来解析这个信息,我很乐意听到它。然而,我真的很想弄清楚我应该使用什么编码或方法来桥接这两个字符串,我希望这是一个简单的问题,因为我发现了类似的问题,但没有使用桥来处理这种错误。

到目前为止,我已经尝试删除分配:

代码语言:javascript
复制
  my $plist = NSString->stringWithCString_($output);

我意识到这个错误不是致命的,但我宁愿在找出它之前不要使用这个方法。

EN

回答 1

Stack Overflow用户

发布于 2012-01-11 05:46:47

NSASCIIStringEncoding,不是NSStringEncodingASCII

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8807276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档