无法在FSRef中读取包含特殊字符的路径

时间:2010-06-22 13:34:31

标签: macos macos-carbon

使用此代码,我试图从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());

有没有办法阅读这样的路径?

2 个答案:

答案 0 :(得分:1)

代码中的什么位置会出现问题?例如,如果插入CFShow(macPath),您是否在调试日志中看到了正确的路径?如果是这样,那么您没有将正确的编码传递给CFStringGetCStringPtr。使用UTF-8。

答案 1 :(得分:0)

  

还为gotURLRef尝试了这个但是我   在我的控制台上也一样   “/Users/Manish/Desktop/\u27a4\u00a9\u261a.png”

Unicode转义序列是您在进行CFURL调用时获得的。网址范围非常limited character

您可以尝试FSRefMakePath。它将从FSRef获得UTF8编码路径。