2011-08-19 78 views
3

我有一个NSDictionary与UTF8字符串作为对象。打印对象时应该打印特殊字符。NSDictionary描述不返回utf8字符?

但是,当我使用description方法将字典转换为字符串时,utf8字符无法正确打印出来。

NSDictionary *test = [NSDictionary dictionaryWithObject:@"Céline Dion" forKey:@"bla"]; 
NSLog(@"%@",[test objectForKey:@"bla"]); // prints fine 
NSLog(@"%@",test);      // does not print fine, é is replaced by \U00e 
NSLog(@"%@",[test description]);   // also does not print fine 

如何在保留utf8字符的同时打印NSDictionary?

+0

为什么你需要'-description'?这很重要吗?你需要的一切是'-valueForKey'(或'-objectForKey')和* it *正常工作。 – akashivskyy

+1

我想将整个请求打印到文本视图 - 是的,它只是用于开发,但正确地打印utf8字符会更好。我想知道我是否做错了什么。 – fabb

回答

2

我不会担心-description做什么,它只是进行调试。

从技术上讲,你没有UTF-8字符串。你有字符串(这是Unicode)。你不知道NSString在内部使用什么,你不应该在意。如果你想要一个UTF-8字符串(就像你传递给C API),使用-UTF8String。

+0

请记住,将对象转换为字符串会调用“-description”。 –

+0

你的意思是在NSLog?这也是为了调试。 –

0

的一种方式,但我不能在此刻检查:

NSString *decodedString = [NSString stringWithUTF8String:[[test description] cStringUsingEncoding:[NSString defaultCStringEncoding]]]; 
NSLog(@"%@",decodedString); 
+0

似乎不起作用,结果相同。 – fabb