Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 无法读取FSRef中包含特殊字符的路径_Macos_Macos Carbon - Fatal编程技术网

Macos 无法读取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

通过这段代码,我试图从fsRefAEDesc获取const char*pathPtr中的路径。如果fsRefAEDesc中的文件名中没有特殊字符,则会给出正确的名称和路径。现在,如果路径有一些特殊字符/Users/XYZ/.rtf,我无法从AEGetDescData()获得正确的fsRef。我相信这与编码有关,并尝试了一些编码,但可以使其工作

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不是问题所在。