[英]Unable to read a path with special characters in FSRef
通過此代碼,我試圖從fsRefAEDesc獲取const char * pathPtr中的路徑。 如果文件名中沒有特殊字符(fsRefAEDesc中存在),它將給出正確的名稱和路徑。 現在,如果path具有一些特殊字符/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。
還嘗試了getURLRef,但是我在控制台上得到了相同的信息,即“ /Users/Manish/Desktop/\➤\©\☚.png”
Unicode轉義序列是通過CFURL調用時得到的。 URL的字符范圍非常有限 。
您可以嘗試FSRefMakePath
。 它將從FSRef獲得UTF8編碼的路徑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.