簡體   English   中英

無法讀取FSRef中帶有特殊字符的路徑

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM