Macos 无法读取FSRef中包含特殊字符的路径
通过这段代码,我试图从fsRefAEDesc获取const char*pathPtr中的路径。如果fsRefAEDesc中的文件名中没有特殊字符,则会给出正确的名称和路径。现在,如果路径有一些特殊字符/Users/XYZ/.rtf,我无法从AEGetDescData()获得正确的fsRef。我相信这与编码有关,并尝试了一些编码,但可以使其工作Macos 无法读取FSRef中包含特殊字符的路径,macos,macos-carbon,Macos,Macos Carbon,通过这段代码,我试图从fsRefAEDesc获取const char*pathPtr中的路径。如果fsRefAEDesc中的文件名中没有特殊字符,则会给出正确的名称和路径。现在,如果路径有一些特殊字符/Users/XYZ/.rtf,我无法从AEGetDescData()获得正确的fsRef。我相信这与编码有关,并尝试了一些编码,但可以使其工作 FSRef fsRef; //AEDesc fsRefAEDesc; //comes from some where. status = AEGetD
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());
有没有办法读取这些路径?在代码中的什么时候出现问题?例如,如果插入
CFShow(macPath)
,是否在调试日志中看到正确的路径?如果是这样,那么您没有将正确的编码传递给CFStringGetCStringPtr
。使用UTF-8
也为gotURLRef尝试过这个,但我
我的控制台上也有同样的。
“/Users/Manish/Desktop/\u27a4\u00a9\u261a.png”
Unicode转义序列是在进行CFURL调用时得到的。URL的范围非常广泛
你可以试试。它将从FSRef获取UTF8编码的路径。谢谢JWWalker,我在macPath中尝试此操作时没有看到正确的路径。在gotURLRef中也尝试了此操作,但我在控制台上得到了相同的路径,即“/Users/Manish/Desktop/\u27a4\u00a9\u261a.png”。我相信我从AEGetDescData(&fsRefAEDesc,(void*)(&FSRef),sizeof(FSRef))获得的FSRef不是Unicode格式的。我们有没有办法得到正确的FSRef。除了FSMakeFSRefUnicode()?我没有其他方法将其转换为unicode,因为它不适合我。如果有办法,请告诉我。谢谢,MIt可能是URL包含正确的字符,但是正在添加Unicode转义符以显示在日志中。FSRef是文件引用,而不是文件名。FSRef不是问题所在。