2010-11-06 45 views
1

我使用此代碼
與桑巴路的NSFileManager contentsOfDirectoryAtPath編碼的問題

urlStringOfVolumeToMount = [urlStringOfVolumeToMount stringByAddingPercentEscapesUsingEncoding:NSMacOSRomanStringEncoding]; 
NSURL *urlOfVolumeToMount = [NSURL URLWithString:urlStringOfVolumeToMount]; 
FSVolumeRefNum returnRefNum; 
FSMountServerVolumeSync((CFURLRef)urlOfVolumeToMount, NULL, NULL, NULL, &returnRefNum, 0L); 

然後安裝一個SMB路徑,我得到的一些路徑的內容:

NSMutableArray *content = (NSMutableArray *)[[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:&error];

我的問題是在每一個路徑「內容「數組包含特殊字符(ü例如)給我2個字符編碼:ü成爲ü

當我記錄字節使用:

[contentItem dataUsingEncoding:NSUTF8StringEncoding];

它給了我:75cc88這是U(75)和¨(CC88)

我期待什麼是UTF-8編碼的字符ü。以字節爲單位,它應該是c3bc

我試圖轉換我的路徑使用ISOLatin1編碼,MacOSRoman ...但只要內容路徑已經有2個單獨的字符,而不是一個ü,任何轉換給我2字符編碼...

如果有人能幫助,謝謝

我的配置:定位於法國和使用雪豹。

回答

0
urlStringOfVolumeToMount = [urlStringOfVolumeToMount stringByAddingPercentEscapesUsingEncoding:NSMacOSRomanStringEncoding]; 

除非特別需要針對的MacRoman由於某種原因,你或許應該使用UTF-8在這裏。

NSMutableArray *content = (NSMutableArray *)[[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:&error]; 

我的問題是在包含特殊字符「內容」陣列(ü爲例)給我的每路2個字符編碼:ü成爲ü

你希望組成的字符和獲取分解的序列。

由於您從文件系統獲取路徑名,這不是一個問題:路徑名正確,因爲您收到它們,並且只要您將它們傳遞給Unicode正確的地方,它們就會也正確顯示。

+0

感謝您的迴應。在urlStringOfVolumeToMount中使用MacRoman而不是utf-8沒有特別的理由。我會改變這一點。我從中得到的字符串被寫入另一個系統的文件中。該字符串是一個電影的路徑,如果字符被分解,它不會打開)。有一個有趣的帖子:http://discussions.info.apple.com/thread.jspa?threadID=2632226&start=15&tstart=0。我終於解決了我的問題,將UTF-8中的特殊字符從ü轉換爲%c3%bc,然後從此字符串獲取NSData,從而構建字節來處理此轉義字符 – niko34 2010-11-07 08:35:43

0

好吧,四年後,我在同樣的事情上掙扎,但對我來說åäö。
花了很多時間找到簡單的解決方案。 。

的NSString有必要比較內置

比較aStringanotherString從哪裏來通過NSFileManagers contentsOfDirectoryAtPath:返回的數組是簡單的:
if([aString compare:anotherString] == NSOrderedSame)

的比較方法需要做的護理這兩個字符串都變成了可比的規範格式。實際上讓他們「如果他們看起來相同,他們是相同的」