2012-10-18 57 views
0

我想從網絡接收的字節創建一個字符串。 NSString我一直都是空的。嘗試從字節創建NSString。它總是返回一個空字符串

​​

正如我所說我得到一個空的NSString。該字符串是一個base64編碼值,因此它應該是有效的utf-8,因爲它只包含ascii符號。

+0

(如果你不使用ARC除了內存泄漏),這些代碼對我來說很好。這個問題必須在別處。 – trojanfoe

+0

當你創建NSData對象之前,你的NSLog(「%@」,data);''會發生什麼?那麼它是空的嗎? – sud0

回答

0

畢竟,你的原始字節可能不是UTF-8。或者,也許,因爲您傳遞的是data+1而不是data本身,您會導致編碼嘗試失敗,因爲該過程認爲存在不正確的UTF-8編碼順序。 (如果我自以爲是的話,請原諒我,但是你必須考慮一切。)無論如何,你都非常依賴你的假設,這是我們不時陷入的一個陷阱。

這是您的策略。如果您嘗試使用NSUTF8StringEncoding創建NSString實例,則返回nil,然後嘗試使用NSISOLatin1StringEncoding。如果返回零,則嘗試使用NSMacOSRomanStringEncoding

即使在所有這些之後,你會得到一個不太正確的字符串,它仍然比零字符串更好,因爲它可以幫助告訴你是否有其他某個區域出現了錯誤。

祝你好運。

+0

我重新檢查了字節,發現我的錯誤:我沒有考慮表示字符串長度的字節。我用一個整數開始字符串。現在它正在工作。 –

0

檢查它是否是真的Base64編碼..

CFErrorRef error = NULL; 
CFDataRef decodedData; 
SecTransformRef decoder; 

decoder = SecDecodeTransformCreate(kSecBase64Encoding, &error); 
if (error) { 
    CFShow(error); 
    exit(-1); 
} 

SecTransformSetAttribute(decoder, 
         kSecTransformInputAttributeName, 
         (CFDataRef *)bytes, 
         &error); 

if (error) { 
    CFShow(error); 
    exit(-1); 
} 

decodedData = SecTransformExecute(decoder, &error); 

if (error) { 
    CFShow(error); 
    exit(-1); 
} 
相關問題