2011-08-30 21 views
3

不正確NSStringEncoding 0x0000值。假設 NSStringEncodingASCII。將在近期停止 這種兼容性映射行爲。ASIHTTPRequest:不正確NSStringEncoding 0x0000值檢測檢測

當我使用ASIHTTPRequest時,我一直得到這個錯誤(50%的時間),它有什麼問題?

我以爲我傳遞的網址是正確的,因爲它不包含任何空間或性格怪異,也許是有一些無法識別的字符結果字符串?

+0

您是否現在解決了這個問題?檢查我的問題在這裏:http://stackoverflow.com/questions/8136925/iphone-incorrect-nsstringencoding-value-0x0000-detected-using-asihttprequest – Madoc

回答

0

複製我的回答從https://stackoverflow.com/q/8251175/918764

的錯誤不是你的數據的編碼不正確,這是幾乎可以肯定的是你要請求某種字符串數據從一個ASIHTTPRequest對象不具有編碼設置 - 如果請求無法連接到服務器,或者服務器沒有發送可理解的編碼頭,則會發生這種情況。


如果你打電話[asiHttpRequest getResponseString]尚未返回一個有效的響應和請求編碼已被設置(即無法連接到服務器)這尤其會發生。

來解決此警告的最簡單方法是通過編輯ASIHTTPRequest類,除去@synthesize responseEncoding並添加簡單的自定義的getter/setter,所以你可以返回的默認編碼,如果編碼響應未設置:

- (NSStringEncoding) responseEncoding 
{ 
    return responseEncoding || self.defaultResponseEncoding; 
} 

- (void) setResponseEncoding:(NSStringEncoding)_responseEncoding 
{ 
    responseEncoding = _responseEncoding; 
} 

還有爲getResponseString方法,我認爲這是隻使用了編碼不需要檢查值的地方更具體的解決辦法 - 因爲編碼應爲任何非零長度響應進行設置:

- (NSString *)responseString 
{ 
    NSData *data = [self responseData]; 
    if (!data) { 
     return nil; 
    } 
    // --- INSERT THIS BLOCK --- 
    // If the 'data' is present but empty, return a simple empty string 
    if (data.length == 0) { 
     return @""; 
    } 
    //assert(self.responseEncoding); // if you're into runtime asserts, uncomment this 
    // --- END OF BLOCK TO INSERT --- 
    return [[[NSString alloc] initWithBytes:[data bytes] length:[data length] encoding:[self responseEncoding]] autorelease]; 
} 
+0

-1:即使這個答案是正確的,你應該鏈接到其他文章用一個簡短的總結而不是整個地複製它。現在總會有這個答案的兩個版本(請注意你對另一個問題的答案已經被編輯)。另外,我相信bradley.ayers的評論是在其他崗位你'setResponseEncoding的內容正確:'方法。 – FreeAsInBeer

+0

我站好了。它看起來好像至少有三份這個答案。 – FreeAsInBeer

+2

如何編輯我的答案以指出另一個問題?你的觀點的關鍵似乎是,這些問題都與相同的基本問題有關;但不作爲重複關閉。不過,我並不認爲我的迴應真的「沒有用」,正如你所指出的那樣。 – rvalue