我有一个通过HTTP从Apache服务器获取的字符串:
- (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进行传输。这可能很简单,但我错过了它。但我在苹果文档或这个网站上找不到它,我的Google-Fu也让我失望了。我遗漏了什么?我该怎么做?感谢您的时间和帮助。
编辑: Ok。你和贾斯汀所说的一切都是有意义的,让事情变得更有意义。这就是我正在做的事情。这行看起来是对的,但我想确认一下我对你的理解是正确的。
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之后对字符串所做的事情。我有一个类别,使它成为一个类似于http://blog.blackwhale.at/?tag=hmac的MD5十六进制字符串,再次感谢。我会撞到你们两个,说这是正确的答案。
发布于 2012-03-08 07:06:27
字符串就是字符串就是字符串。编码指的是如何对NSData进行编码和解码。@"blah“与@"blah”相同。其中任何一个都没有UTF8或UTF16。
添加了,因此您可以执行[@"myString" dataUsingEncoding:NSUTF16StringEncoding];
如果将其转换回字符串,仍然会有@"myString“
Answer下面评论中的最后一个问题。因此,当您发布到服务器时,服务器主体是编码的数据。所以你想做的就是对字符串做任何你想做的事情。然后使用特定的编码将字符串转换为数据,在本例中为NSUTF16StringEncoding或NSUTF16LittleEndianStringEncoding。您没有创建UTF-16字符串。您正在将unicode字符串转换为UTF-16编码数据。这就是你需要做的。
NSData *postBody = [[[self.result MD5] uppercaseString] dataUsingEncoding:NSUTF16LittleEndianStringEncoding];
如果需要向postBody添加更多数据,请改为创建NSMutableData,并根据需要追加新数据。
发布于 2012-03-08 07:07:18
NSString保存它选择的任何编码的缓冲区-可能是UTF-8、UTF-16或其他编码。
如果您只想从UTF-16序列创建一个NSString,那么可以尝试NSUTF16BigEndianStringEncoding或它的相关工具之一。
https://stackoverflow.com/questions/9610498
复制相似问题