Objective C中的UTF8字符解码

Gau*_*te 21 iphone json objective-c utf-8

我试图从我的iPhone上的json webservice解析一个feed但是utf8转换不能正常工作或我做错了什么这里是feed的一部分
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);
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出:
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.

小智 39

经过多次悲痛,我已经想到了这一点.用这个.

NSString *correctString = [NSString stringWithCString:[utf8String cStringUsingEncoding:NSISOLatin1StringEncoding] encoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)

  • 我试过你的代码,但我得到了NULL cString' (2认同)

Tom*_*mmy 10

我认为测试案例已经破裂; 下列:

NSString* str1 = @"est un r \u00c3\u00aa ve en noir";
NSLog(@"%@", str1);
Run Code Online (Sandbox Code Playgroud)

还输出'est unrêveen noir'.但是,这个:

NSString* str1 = @"est un rêve en noir";
NSLog(@"%@", str1);
Run Code Online (Sandbox Code Playgroud)

输出'estunrêveennoir',同样如下:

NSString* str1 = @"est un rêve en noir";

NSString* str = [NSString stringWithUTF8String:[str1 cStringUsingEncoding:NSUTF8StringEncoding]];
NSLog(@"%@", str);
Run Code Online (Sandbox Code Playgroud)

并略微缩短版本:

NSString* str1 = @"est un rêve en noir";

NSString* str = [NSString stringWithUTF8String:[str1 UTF8Encoding]];
NSLog(@"%@", str);
Run Code Online (Sandbox Code Playgroud)

确实:

char *str1 = "est un r\xc3\xaave en noir";

NSString* str = [NSString stringWithUTF8String:str1];
NSLog(@"%@", str);
Run Code Online (Sandbox Code Playgroud)

我认为这是一个JSON的问题,而不是UTF8.\ u后跟四个十六进制数字是JSON编码通用UTF16字符的方式,它不是UTF的固有部分.所以NSString不知道如何处理它.您的JSON解析器需要适应以正确解析转义序列.