我比較來自XML的字符串與另一個字符串,結果顯示它們不相等。但在NSLog()中都是相同的(例如Valore Books)。iphone比較 與NSString
然後我檢查了XML的來源,我才知道實際的字符串是「Valore   Books」和 事實上是一個空間。但問題是,當我將它與@「Valore Books」進行比較時,這是說兩者都不相同。
怎麼辦?
我比較來自XML的字符串與另一個字符串,結果顯示它們不相等。但在NSLog()中都是相同的(例如Valore Books)。iphone比較 與NSString
然後我檢查了XML的來源,我才知道實際的字符串是「Valore   Books」和 事實上是一個空間。但問題是,當我將它與@「Valore Books」進行比較時,這是說兩者都不相同。
怎麼辦?
我使用google提供的字符串解析工具解決了這個問題。謝謝大家。
注意:我用一個實際上正確的問題替換了我的原始答案。對於最初的誤解抱歉。
下面一行將忽略字符串中的html實體。
NSString *A = @"Valore Books";
NSString *B = (NSString *)CFXMLCreateStringByUnescapingEntities(NULL, (CFStringRef)A, NULL);
我找不到任何更高級別的等價函數,但其性能應該很好。如果我正確地閱讀了文檔,那麼可以傳入一個CFDictionaryRef作爲第三個參數來指定額外的轉換,但似乎它在自己的標準文檔上做的很好。
文檔是here。
請注意,無論您將這些字符串拖入程序中,還是並非每次比較,處理編碼都可能是一個好主意。
還發現你需要考慮的第二部分。 &#160不只是一個空間,它是一個非破壞性的空間,上面的代碼將轉換爲\ 312而不是標準空間。這些在編碼中實際上是分開的字符,當你做字符串比較時它會失敗。
也許它會是最簡單的使用
- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement
然後通過UNESCAPE運行它與#32至#替換爲160。
它也剛剛發生在我身上,CFXMLCreateStringByUnescapingEntities
將不會在iphone上可用。 Here is a link的例子顯示瞭如何在iPhone上進行類似的轉換。
' '不是一個百分比編碼,而是一個HTML實體。所以這種方法在這裏沒有幫助。 – 2009-11-17 13:30:07
雖然谷歌搜索似乎表明它會公平,但我還沒有測試過。當我進入我的辦公室時,我會給它一個鏡頭。 – 2009-11-17 13:34:16
 是一個非破壞性的空間(Unicode值U + 00A0) 經常使用的空間是(在@「Valore Books」中)的Unicode值U + 0020。 所以它是不一樣的字符,並且這兩個字符串不相等。
你用什麼語法分析器? – Morion 2009-11-17 13:29:46