我有NStrings的NSArray,我在打印数组时从NSLog得到了这个。 这是我实施的代码:
NSMetadataQuery *query = [[NSMetadataQuery alloc] init];
.....
NSArray *queryResults = [[query results] copy];
for (NSMetadataItem *item in queryResults)
{
id value = [item valueForAttribute: kMDItemAlbum];
[databaseArray addObject: value];
}
"The Chronicles Of Narnia: Prince Caspian",
"Taste the First Love",
"Once (Original Soundtrack)",
"430 West Presents Detroit Calling",
"O\U0308\U00d0\U00b9u\U0301\U00b0\U00aeA\U0300O\U0308A\U0300O\U0308I\U0301A\U030a-O\U0301a\U0300A\U0302\U00a1",
"\U7ea2\U96e8\U6d41\U884c\U7f51",
"I\U0300\U00ab\U00bc\U00abO\U0303A\U030aE\U0300y\U0301\U00b7a\U0301",
"A\U0303n\U0303\U00b8e\U0300\U00b2I\U0300C\U0327U\U0300",
"\U00bb\U00b3A\U0308i\U0302O\U0303\U00bdO\U0301N\U0303",
"American IV (The Man Comes Aro",
"All That We Needed",
现在我如何将人类不可读的字符串更改为人类可读的字符串?感谢。
答案 0 :(得分:2)
回顾description
完成的转义(例如\U0308
),字符串是错误的(例如,“Öйú°®ÀÖÀÖÍÅ-Óà”),因为你得到的数据是错误的。< / p>
那可能不是Spotlight的错。 (您可以通过尝试使用不同的ID3标记库来验证。)很可能,文件本身包含编码不良的标记。
解决此问题:
如果第2步尝试成功,那么这就是您的有效数据(除非您非常不走运)。如果所有尝试都失败,则数据无法恢复,您可能需要警告用户他们的输入文件包含伪造标记。
答案 1 :(得分:1)
这些字符串是utf-8编码的。您可以通过以下方式解码它们:
NSString *myDecoded = [NSString stringWithUTF8String:myEscapedString];
因此,要处理完整数组'completeArray',您可以先转换为const char *然后再转换为NSString:
NSMutableArray *processed = [NSMutableArray arrayWithCapacity:completeArray.count];
for (NSString* s in completeArray) {
[processed addObject:[NSString stringWithUTF8String:[s cStringUsingEncoding:ASCIIEncoding]]];
}
答案 2 :(得分:1)
解析这些字符串并不是特别容易:请参阅this SO post了解背景信息。它有其他SO帖子的链接,具有处理此问题的具体方法。