UTF16中的iOS NSString

add*_*dzo 0 utf-16 nsstring nsurlconnection ios

我有一个通过HTTP从Apache服务器获取的字符串:

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

我需要将该字符串设为UTF16字符串.我不想把它变成NSData.我需要保持NSString,我需要它在UTF16.我很乐意将它放在一个NSData对象中,如果我可以将其作为UTF16.我现在正在做类似的事情:

[self.returnedData appendData:data];
Run Code Online (Sandbox Code Playgroud)

但是仍然将它转换为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);
Run Code Online (Sandbox Code Playgroud)

最后一部分就是我在UTF-16之后用字符串做的事情.我有一个类别,使其成为类似于http://blog.blackwhale.at/?tag=hmac的MD5十六进制字符串 再次感谢.我会碰到你们两个,并说这是正确的答案.

dbr*_*vic 5

字符串是字符串是字符串.编码指的是如何对NSData进行编码和解码.@"blah"与@"blah"相同.其中任何一个都没有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,并根据需要附加新数据.