我们有php服务器以utf-8编码发送json字符串。 我负责获取数据的iphone应用程序。
我想确保在我身边一切都是正确的:
//after I downlad the data stream :
NSString* content = [[NSString alloc] initWithData:self.m_dataToParse encoding:NSUTF8StringEncoding];
//here the data is shown correctly in the console
NSLog(@"%@",content);
SBJsonParser *_parser = [[SBJsonParser alloc]init];
NSDictionary *jsonContentDictionary = [_parser objectWithData:self.m_dataToParse];
//here, when i printer values of array IN array, i see \u454 u\545 \4545 format. any ideas why ?
for(id key in jsonContentDictionary)
{
NSLog(@"key:%@, value:%@,key, [ jsonContentDictionary objectForKey:key]);
}
即时通讯使用最新版本的json库: https://github.com/stig/json-framework/
问题是iphone方面? (json解析器?)或在php服务器?
再说一遍:
1.在控制台上,在json之前,字符串看起来是o.k
2.执行json后,数组值中的数组格式为\u545 \u453 \u545
提前致谢。
答案 0 :(得分:0)
您的代码是正确的。 问题的一个可能原因,你必须用你的内容提供者(发送json给你的服务器)调查它,即使整个json字符串被正确编码为utf-8(记住:json文本是一个字符序列,因此必须指定编码),可能会发生一些或所有文本内容(即json消息中包含的单个对象的值)最初以另一种格式编码,通常这是html -encoding(iso-8859),特别是在使用特定字符时(例如西里尔文或亚洲文)。现在json框架默认将所有数据解码为utf-8,但是如果utf-8字符和iso-8859之间存在编码不匹配(只是为了保留在示例中),那么在utf-中转换它们的唯一方法8是使用\ u格式。这种情况经常发生,特别是当php脚本从html页面提取信息时,通常使用iso-8859进行编码。并且还要考虑iOS无法将整个iso-8859字符集转换为unicode(例如:cyrillic)。 可能的解决方案是: - 做文本服务器端的内容编码(iso-8859 - > utf-8) - 或者如果这是不可能的话,那么您可以更好地识别来自内容提供商的\ uxxx序列,并用相应的utf-8字符替换它们。