Невозможно прочитать путь со специальными символами в FSRef - PullRequest
0 голосов
/ 22 июня 2010

С помощью этого кода я пытаюсь получить путь в const char * pathPtr из fsRefAEDesc.Он дает правильное имя и путь, если в имени файла, который есть в fsRefAEDesc, нет специальных символов.Теперь, если путь содержит некоторые специальные символы /Users/XYZ/.rtf, я не получаю правильный fsRef от AEGetDescData ().Я полагаю, что это как-то связано с кодировкой и пробовал некоторые из них, но может заставить ее работать.

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 ]

1 голос
/ 22 июня 2010

В какой момент в вашем коде возникает проблема?Например, если вы вставите CFShow(macPath), вы видите правильный путь в журнале отладки?Если это так, значит, вы не передаете правильную кодировку CFStringGetCStringPtr.Используйте UTF-8.

0 голосов
/ 23 июня 2010

Также попробовал это для gotURLRef, но я получил то же самое на своей консоли, т.е. "/Users/Manish/Desktop/\u27a4\u00a9\u261a.png"

escape-последовательность Unicodeэто то, что вы получаете при прохождении вызовов CFURL.URL имеет очень ограниченный символ диапазон.

Вы можете попробовать FSRefMakePath.Он получит путь в кодировке UTF8 из FSRef.

...