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 文字列を正しくエスケープ解除するには、Using Objective C/Cocoa を使用して unicode 文字をエスケープ解除する (例: \u1234 ) を参照してください。

適切な回答が 3 つあるため、回答の代わりにリンクを提供します。ニーズに最適なものを選択できます。

于 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 に答える