我正在尝试从我的iPhone上的json webservice解析一个feed但是utf8转换不能正常工作或者我做错了什么
这是饲料的一部分
est un r\u00c3\u00aave en noir
以下是我编写的用于转换上述内容的代码:
NSString* str1 = @"est un r \u00c3\u00aa ve en noir";
NSString* str = [NSString stringWithUTF8String:[str1 cStringUsingEncoding:NSUTF8StringEncoding]];
NSLog(@"Converted UTF %@",str);
这是我得到的输出:
Converted UTF est un r ê ve en noir
预期输出应为
Converted UTF est un rêve en noir
当我检查UTF表并在线使用utf转换器时,使用相同的代码并使用字符串@"est un r\u00EAve en noir"
正确获取输出但我认为如果我没有弄错,则使用UTF16表示。现在我真正解决了如何解析这个feed。
答案 0 :(得分:39)
NSString *correctString = [NSString stringWithCString:[utf8String cStringUsingEncoding:NSISOLatin1StringEncoding] encoding:NSUTF8StringEncoding];
答案 1 :(得分:10)
我认为测试案例已经破裂;以下内容:
NSString* str1 = @"est un r \u00c3\u00aa ve en noir";
NSLog(@"%@", str1);
同时输出'est unrêveen noir'。但是,这个:
NSString* str1 = @"est un rêve en noir";
NSLog(@"%@", str1);
输出'estunrêveennoir',同样如下:
NSString* str1 = @"est un rêve en noir";
NSString* str = [NSString stringWithUTF8String:[str1 cStringUsingEncoding:NSUTF8StringEncoding]];
NSLog(@"%@", str);
同样略短的版本:
NSString* str1 = @"est un rêve en noir";
NSString* str = [NSString stringWithUTF8String:[str1 UTF8Encoding]];
NSLog(@"%@", str);
确实:
char *str1 = "est un r\xc3\xaave en noir";
NSString* str = [NSString stringWithUTF8String:str1];
NSLog(@"%@", str);
我认为这是JSON的问题,而不是UTF8。 \ u后跟四个十六进制数字是JSON编码通用UTF16字符的方式,它不是UTF的固有部分。所以NSString不知道如何处理它。您的JSON解析器需要进行调整以正确解析转义序列。
答案 2 :(得分:0)
在iOS 9中,不需要做任何事情。它会自动转换。
NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:request
fromData:postData completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSLog(@"response header: %@",response);
NSString* aStr;
aStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"response data: %@", aStr);
NSDictionary * json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
for (NSDictionary *dict in json)
{
NSLog(@"%@", dict);
NSString *name = [dict objectForKey:@"name"];
NSString *msg = [dict objectForKey:@"message"];
NSString *topic = [dict objectForKey:@"topic"];
NSLog(@"*********** %@, %@, %@", name,topic,msg);
// now do something
}
答案 3 :(得分:0)
发送到服务器时
NSString* str1 = @"est un r \u00c3\u00aa ve en noir";
NSData *str1Data = [str1 dataUsingEncoding:NSNonLossyASCIIStringEncoding];
NSString *str2 = [[NSString alloc] initWithData:str1Data encoding:NSUTF8StringEncoding];
收到后你可以像这样解码
NSData *recivedStrData = [recivedStr dataUsingEncoding:NSUTF8StringEncoding];
NSString *strResult = [[NSString alloc] initWithData:recivedStrData encoding:NSNonLossyASCIIStringEncoding];
这对我有用!