iOS NSString в UTF16 - PullRequest
       37

iOS NSString в UTF16

0 голосов
/ 08 марта 2012

У меня есть строка, которую я получил с сервера Apache по HTTP:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    ...

Мне нужно сделать эту строку строкой UTF16.Я не хочу превращать это в NSData.Мне нужно сохранить его NSString, и мне нужно, чтобы он был в UTF16.Я был бы счастлив поместить его в объект NSData, даже если бы я мог сделать это как UTF16.Сейчас я делаю что-то похожее:

[self.returnedData appendData:data];

Но это все равно переводит как UTF8.Это, вероятно, просто, и я скучаю по нему.Но я не нахожу его в документации Apple или на этом сайте, и мой Google-Fu подвел меня.Что мне не хватает?Как я могу это сделать?Спасибо за ваше время и помощь.

РЕДАКТИРОВАТЬ: ОК.Все, что вы и Джастин сказали, имеет смысл и делает вещи более понятными.Вот чем я занимаюсь.Кажется, это правильно с этой строки, но я хотел убедиться, что правильно вас понимаю.

NSData *resultData = [self. result dataUsingEncoding:NSUTF16LittleEndianStringEncoding];
NSString *resultStr = [[NSString alloc] initWithData:resultData encoding:NSUTF16LittleEndianStringEncoding];
NSString *md5Result = [[NSString stringWithFormat:@"%@",[resultStr MD5]] uppercaseString];
NSLog(@"md5Result = %@",md5Result);

Последняя часть - это то, что я делаю со строкой после ее UTF-16.У меня есть категория, которая делает шестнадцатеричную строку MD5 похожей на http://blog.blackwhale.at/?tag=hmac Еще раз спасибо.Я ударю вас обоих и скажу, что это правильный ответ.

Ответы [ 2 ]

5 голосов
/ 08 марта 2012

Строка является строкой является строкой.Кодирование относится к тому, как его кодируют и декодируют в и из NSData.@ "бла" - это то же самое, что и "бла".Для них нет UTF8 или UTF 16.

Добавлено Так что вы можете сделать [@"myString" dataUsingEncoding:NSUTF16StringEncoding];

.все еще есть @ "myString"

Ответ последний вопрос в комментарии ниже.Поэтому, когда вы размещаете POST на сервере, тело сервера кодирует данные.Итак, что вы хотели сделать, это сделать то, что вы хотите, чтобы струна.Затем преобразуйте строку в данные, используя определенную кодировку, в вашем случае NSUTF16StringEncoding или NSUTF16LittleEndianStringEncoding.Вы НЕ создаете строку UTF-16.Вы конвертируете строку Unicode в данные в кодировке UTF-16.Это то, что вам нужно сделать тогда.

NSData *postBody = [[[self.result MD5] uppercaseString] dataUsingEncoding:NSUTF16LittleEndianStringEncoding];

Если вам нужно добавить больше данных в postBody, вместо этого создайте NSMutableData и добавьте новые данные по мере необходимости.

1 голос
/ 08 марта 2012

NSString содержит буфер любой выбранной им кодировки - это может быть UTF-8, UTF-16 или что-то еще.

Если вы просто хотите создать NSString из UTF-16 последовательность, попробуйте NSUTF16BigEndianStringEncoding или один из его родственников.

...