Я использую Google Protobuf для отправки сериализованного класса на http-сервер. Команда для этого:
message.SerializeToString(&out);
Обратите внимание, что мы сериализуем в строку. Сервер возвращает мне точно такой же объект.
Итак, в связи с этим: didReceiveData метод, я получаю данные.
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData*)data
{
if (self.receivingData) {
[self.dataReceived appendData:data];
}
}
В моем методе connectionDidFinishLoading я думаю, что мне нужно поместить NSMutableData (self.dataReceived) в строку NSString.
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
self.receivingData = NO;
NSLog(@"%@", self.dataReceived);
NSString *data = [[NSString alloc] initWithData:self.dataReceived encoding:NSASCIIStringEncoding]; // Wrong encoding ????
NSMutableDictionary *processedData = [NSMutableDictionary dictionaryWithCapacity:1];
[processedData setObject:data forKey:@"ImageData"];
NSNotificationCenter *processedNote = [NSNotificationCenter defaultCenter];
[processedNote postNotificationName:@"DataReceived" object:nil userInfo:processedData];
}
Но я не уверен, какую кодировку использовать. Когда я отправляю данные, это выглядит так:
"\b\x01\x12\x04Lucy\x1a\xd4\xdc;\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\...... (There's more)
Когда я получаю данные, это выглядит так:
<08011204 4c756379 1ad4dc3b ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ..... (There's more)
Когда я инициирую NSString с данными выше (кодирование NSASCIIStringEncoding), я получаю это:
LucyÔÜ;ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ....... (There's more)
В конечном итоге мне нужно будет проанализировать данные из строки используя метод Google Protobuf: message.ParseFromString(data);
Как я могу узнать, какую кодировку использовать?
Попробуй это.
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
NSLog(@"%@", [response textEncodingName]);
}
В итоге я использовал следующий код:
const char *bytes = (const char *)[data bytes];
std::string byteString = std::string(bytes);
Это сработало !!
Но у @ trick14 был классный ответ, который показывает тип кодировки. Это было потрясающе.
Надеюсь, это кому-нибудь поможет.