arudak
@arudak
Позитив во всем. Поиск знаний везде.

Как сменить кодировку при работе с socket?

Пробую писать первое клиентское приложение.
кусок кода
UInt8 buf[] = "{\"CMD\":\"GETCITY\"}\r\n";
        NSUInteger bytesWritten = CFWriteStreamWrite(writeStream, buf, strlen((char*)buf));
        NSLog(@"Written: %lu", (unsigned long)bytesWritten);
        NSLog(@"buffer: %s", buf);    }
    CFReadStreamSetProperty(readStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
    if(!CFReadStreamOpen(readStream))
    {
        NSLog(@"Error reading");
    }
    else
    {
        UInt8 bufr[1024];
        NSUInteger bytesRead  = CFReadStreamRead(readStream, bufr, sizeof(bufr));
        NSLog(@"Read: %lu", (unsigned long)bytesRead);
        NSLog(@"buffer: %s", bufr);
        NSString *info =[[NSString alloc] initWithBytes:bufr length:sizeof(bufr) encoding: NSUTF8StringEncoding] ;
       NSLog(@"Ответ сервера: %@", info);


После получения ответа в переменной bufr вижу
"Name":"–¢–µ—Å—Ç–æ–≤–∞—è"

Но как только пробую конвертировать в UTF8 получаю NULL .
Подскажите что я делаю не так ? И подозреваю что при отправке на сервер кириллицы я тоже словлю проблему.
  • Вопрос задан
  • 192 просмотра
Решения вопроса 1
@denisk0n
Creative technology
Для начала необходимо прийти как "общему знаменателю" - использовать UTF8.
Если с сервера приходит win1251 строка, то соответственно нужно и указывать такую кодировку
NSWindowsCP1251StringEncoding

PS
Для создания строки на основе utf8 байтов можно использовать
+ stringWithUTF8String:

PPS Так же бы порекомендовал использовать что-нибудь более высокоуровневое для первого сетевого приложения - NSURLRequest, NSURLConnection из Foundation!
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы