使用此代码,我试图从fsRefAEDesc获取const char * pathPtr中的路径。如果fsRefAEDesc中的文件名中没有特殊字符,它会给出正确的名称和路径。现在如果路径有一些特殊字符/Users/XYZ/.rtf我没有从AEGetDescData()获得正确的fsRef。我相信它与Encoding有一些关系,并尝试了一些但可以使它工作。
FSRef fsRef;
//AEDesc fsRefAEDesc; //comes from some where.
status = AEGetDescData( &fsRefAEDesc, (void*)(&fsRef), sizeof(FSRef));
//OSErr result = FSMakeFSRefUnicode(&fsRef, 1024, (UniCharPtr)(&fsRef), kTextEncodingUnknown, &fileRef);
AEDisposeDesc( &fsRefAEDesc );
CFURLRef* gotURLRef = CFURLCreateFromFSRef(NULL, &fsRef);
CFStringRef macPath = CFURLCopyFileSystemPath(gotURLRef, kCFURLPOSIXPathStyle);
const char *pathPtr = CFStringGetCStringPtr(macPath, CFStringGetSystemEncoding());
有没有办法阅读这样的路径?
答案 0 :(得分:1)
代码中的什么位置会出现问题?例如,如果插入CFShow(macPath)
,您是否在调试日志中看到了正确的路径?如果是这样,那么您没有将正确的编码传递给CFStringGetCStringPtr
。使用UTF-8。
答案 1 :(得分:0)
还为gotURLRef尝试了这个但是我 在我的控制台上也一样 “/Users/Manish/Desktop/\u27a4\u00a9\u261a.png”
Unicode转义序列是您在进行CFURL调用时获得的。网址范围非常limited character。
您可以尝试FSRefMakePath
。它将从FSRef获得UTF8编码路径。