2012-04-13 83 views
7

我有一个从服务器接收消息的应用程序。 这些消息可能包含西里尔文字符。但是,当我将接收到的数据转换为NSString时,我只获得“\ u041c \ u0430 \ u043a”符号而不是cyrrilic。NSData到NSString编码

NSData *responceData = ....; 

    NSString* responceString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 

我该如何得到正确的符号?

回答

17

有一个更简单的解决方案。

如果您的数据中包含字面unicode转义序列(即,\u041c\0430\043a为纯ASCII字符,未应用unicode转义),那么这不是该字符串的UTF-8编码。你想要NSNonLossyASCIIStringEncoding

NSData *responseData = ....; 

NSString* responseString = [[NSString alloc] initWithData:responseData encoding:NSNonLossyASCIIStringEncoding]; 

responseString现在正是你所期望的。

+0

+1不知道内置的解决方案,显然更喜欢在本土的一个:),一旦我的答案不被接受,我将删除它。 – Joe 2012-04-13 20:15:57

+0

是的,这个名字并没有使它变得非常明显,所以很多人不知道它。 – 2012-04-13 20:19:12