我想從網絡接收的字節創建一個字符串。 NSString我一直都是空的。嘗試從字節創建NSString。它總是返回一個空字符串
正如我所說我得到一個空的NSString。該字符串是一個base64編碼值,因此它應該是有效的utf-8,因爲它只包含ascii符號。
我想從網絡接收的字節創建一個字符串。 NSString我一直都是空的。嘗試從字節創建NSString。它總是返回一個空字符串
正如我所說我得到一個空的NSString。該字符串是一個base64編碼值,因此它應該是有效的utf-8,因爲它只包含ascii符號。
畢竟,你的原始字節可能不是UTF-8。或者,也許,因爲您傳遞的是data+1
而不是data
本身,您會導致編碼嘗試失敗,因爲該過程認爲存在不正確的UTF-8編碼順序。 (如果我自以爲是的話,請原諒我,但是你必須考慮一切。)無論如何,你都非常依賴你的假設,這是我們不時陷入的一個陷阱。
這是您的策略。如果您嘗試使用NSUTF8StringEncoding
創建NSString實例,則返回nil,然後嘗試使用NSISOLatin1StringEncoding
。如果返回零,則嘗試使用NSMacOSRomanStringEncoding
。
即使在所有這些之後,你會得到一個不太正確的字符串,它仍然比零字符串更好,因爲它可以幫助告訴你是否有其他某個區域出現了錯誤。
祝你好運。
我重新檢查了字節,發現我的錯誤:我沒有考慮表示字符串長度的字節。我用一個整數開始字符串。現在它正在工作。 –
檢查它是否是真的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);
}
(如果你不使用ARC除了內存泄漏),這些代碼對我來說很好。這個問題必須在別處。 – trojanfoe
當你創建NSData對象之前,你的NSLog(「%@」,data);''會發生什麼?那麼它是空的嗎? – sud0