0

此代码正确显示为Ecole带有重音E

NSString *test = @"\u00c9cole";
cell.detailTextLabel.text = test;

但是当我从服务器获取作为 Json 发送的字符串时,我看到的不是E重音而是 unicode \u00c9

从服务器获取 Json 字符串的代码:

- (void) handleProfileDidDownload: (ASIHTTPRequest*) theRequest
{
    NSMutableString *str = [[NSMutableString alloc] init];
    [str setString:[theRequest responseString]];
    [self preprocess:str]; //NSLog here shows  str has the unicode characters \u00c9

}

- (void) preprocess: (NSMutableString*) str 
    {
    [str replaceOccurrencesOfString:@"\n" withString:@"" options:NSLiteralSearch range:NSMakeRange(0, [str length])];
    [str replaceOccurrencesOfString:@"\"" withString:@"" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [str length])];
    [str replaceOccurrencesOfString:@"\\/" withString:@"/" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [str length])];

}

现在,如果我这样做,

cell.detailTextLabel.text = str;

我听不懂 E 而不是 \u00c9

我究竟做错了什么?

4

2 回答 2

1
NSString *test = @"\u00c9cole";

由编译器转换为重音 E。

在您的 JSON 中,字符串 \u00c9cole 是文字反斜杠-u-zero-zero-c-nine。

您可以通过转义反斜杠来获得相同的行为。

NSString *test2 = @"\\u00c9cole";

这会给你同样的坏结果,\u00c9cole。


要正确转义 JSON 字符串,请参阅使用 Objective C/Cocoa 转义 unicode 字符,即 \u1234

我提供链接而不是答案,因为有三个不错的答案。您可以根据自己的需要选择最好的一种。

于 2012-11-05T21:33:04.720 回答
0

这里的 NSLog 显示 str 有 unicode 字符 \u00c9

由此,您可以知道您收到的 JSON 实际上里面没有字母É,而是转义序列\u00c9。因此,您需要以某种方式取消转义此字符串:

CFMutableStringRef mutStr = (CFMutableStringRef)[str mutableCopy];
CFRange rng = { 0, [mutStr length] };
CFStringTransform(mutStr, &rng, CFSTR("Any-Hex/Java"), YES);

然后你可以mutStr在你的代码中使用。

于 2012-11-05T21:34:10.163 回答