2015-04-20 31 views
0

我仍然在努力訪問某些Google頁面,並嘗試過多種編碼類型組合。如果失敗,我也嘗試過UTF8,然後進入默認狀態。這是事情變得非常奇怪的地方。contentsURL編碼類型的損壞?

我做到以下幾點:

println("URL within process page = \(url)") 

println("Trying NSUTF8") 
origURLString = String(contentsOfURL: url, encoding: NSUTF8StringEncoding, error: &error) 
if (error != nil) { 
    println("Error = \(error)") 
    println("Trying NSASCII next") 
    origURLString = String(contentsOfURL: url, encoding: NSASCIIStringEncoding, error: &error) 
    if (error != nil) { 
     println("Error = \(error)") 
    } 
} 

if (error != nil) { 
    return "There seems to be a problem going to this site" 
} 

到contentsOfURL兩個調用失敗,出現以下跡:

試圖NSUTF8 錯誤=可選(錯誤域= NSCocoaErrorDomain代碼= 261「的操作couldn (Cocoa error 261.)「UserInfo = 0x7fbbda599b00 {NSURL = http://www.google.com/search?ie=ISO-8859-1&hl=en-GB&source=hp&q=hello&btnG=Google+Search&gbv=1,NSStringEncoding = 4})

嘗試NSASCII接下來 錯誤=可選(錯誤域= NSCocoaErrorDomain代碼= 261「該操作無法完成。 (可可錯誤261)」的UserInfo = {0x7fbbda599b00 = NSURL http://www.google.com/search?ie=ISO-8859-1&hl=en-GB&source=hp&q=hello&btnG=Google+Search&gbv=1,NSStringEncoding = 4})

但是,如果我不嘗試使用NSUTF8StringEncoding,只是使用ASCII編碼:

origURLString = String(contentsOfURL: url, encoding: NSASCIIStringEncoding, error: &error) 

然後這工作(不太好,因爲編碼是不正確的)至少沒有錯誤代碼,我得到一個完整的HTML頁面

顯然,我不能使用ASCII編碼的一切,我寧願建立一個一般的方法是在違約之前先檢查UFT8

我用我的第一種方法腐蝕了什麼嗎?錯誤信息是否結轉?

我試着在一個循環中測試每個NSEncodingType並失敗,所以我縮小到只有兩個,我得到同樣的問題。

想法?我完全喪失了。

回答

0

此功能可以幫助我糾正我的文本字符串:

func utf(txt:String)->NSString{ 
     var newtxt = txt.stringByReplacingOccurrencesOfString("\\n", withString: " ", options: NSStringCompareOptions.LiteralSearch, range: nil) 
     if var scb = NSString(CString: newtxt ,encoding:NSNonLossyASCIIStringEncoding){ 
      return scb 
     }else{ 
      var scb = NSString(CString:newtxt, encoding:NSUTF8StringEncoding) 
      return scb! 
     } 
    } 

這很有趣,因爲它佔據適合 根據將要發送的文本字符串編碼。

+0

謝謝埃利亞斯。這看起來像一個非常好的通用編碼例程,但我不確定它如何幫助解決URL內容問題,或解釋爲什麼在ASCII請求之前執行UTF請求會阻止ASCII請求正常工作。 –

+0

你可以在Swift [swiftHTTP](https://github.com/daltoniam/swiftHTTP)上開始嘗試'HTTPTask()',並說261錯誤是由於SSL證書 – eliasRuizHz