我試圖比較兩個多行字符串的相等性。我從Web服務中獲得一個字符串,另一個是通過Scripting Bridge從iTunes獲取的字符串。來自Web服務的字符串最終會傳輸到iTunes,所以如果我這樣做,然後重新比較字符串,理想情況下它們是相同的。NSString的isEqualToString:似乎錯誤地報告不等於
但是,當比較這樣的字符串時,似乎isEqualToString:總是返回不等式。我通過測試來自iTunes的一個字符串來源於Web服務,並直接從Web服務中直接測試一個字符串來測試它。
將兩個字符串記錄到控制檯都會從兩個顯示完全相同的字符串中生成輸出。記錄字符串的長度會產生相同的長度。
我也試過比較使用其他方法的字符串。例如,我轉換他們的ASCII字符串,以確保它不是一些Unicode的問題:
NSData *iTunesStringData = [[self iTunesString] dataUsingEncoding:NSASCIIStringEncoding
allowLossyConversion:YES];
NSData *webServiceStringData = [[self webServiceString] dataUsingEncoding:NSASCIIStringEncoding
allowLossyConversion:YES];
NSString *newiTunesString = [[[NSString alloc] initWithData:iTunesStringData encoding:NSASCIIStringEncoding] autorelease];
NSString *newWebServiceString = [[[NSString alloc] initWithData:webServiceStringData encoding:NSASCIIStringEncoding] autorelease];
BOOL result = [newiTunesString isEqualToString:newWebServiceString];
同樣的問題,不等於。我試過只比較第一個字符:
NSComparisonResult result = [newiTunesString compare:newWebServiceString
options:NSLiteralSearch
range:NSMakeRange(0,1)
locale:[NSLocale currentLocale]];
不返回NSOrderedSame。我已經將這些第一個字符記錄到了控制檯,它們看起來完全相同我還考慮了回車的差異,並試圖在比較之前在兩個字符串中用@「」替換@「\ r」,這不起作用(並且此外不應影響第一個字符的平等)。我不想刪除@「\ n」字符,因爲我想保留多行。
發生了什麼事?任何其他想法?
您是否試過從每個字符串中獲取unichar緩衝區,並且在並行迭代它們以找出它們的不同之處? – 2010-08-08 03:03:28
你也可以嘗試使用'-precomposedStringWithCanonicalMapping'或'-precomposedStringWithCompatibilityMapping'方法之一,看看是否有所作爲。 – 2010-08-08 03:05:15
如果將每個字符串的'dataUsingEncoding:'UTF-8(或ASCII)寫入文件並對它們進行比較或十六進制轉儲它們並對十六進制轉儲進行比較呢? – 2010-08-08 03:09:09