0

我正在尝试解析 GET 请求的 JSON 响应。当字符,是拉丁文没有问题。

但是,当它们不是拉丁语时,消息不会正确输出。我尝试了希腊语,而不是“πανος”,而是“& pi; & alpha; & nu; & omicron; & sigmaf;”

我用于解析响应的代码是:

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

NSLog(@"response %@", responseString);




// array from the JSON string
NSArray *results = [responseString JSONValue];

当我尝试使用 ajax 从网站读取响应时,一切都很好。这同样适用于尝试使用来自 iphone 的数据向应用程序服务器发送 GET 请求。因此,当我将数据传输到服务器并从网站读取时,一切都很好。当我尝试在应用程序中显示相同的数据时,“休斯顿我们遇到了问题”。

有什么线索吗?

编辑:为避免误解,这不是 HTML 的问题,我只是指出,对于某些 readon utf-8 字符,这里的编码正确且自动,例如。"&pi" 将被转换为 "π",但是目标 c 似乎并没有自己这样做

4

4 回答 4

0

查看 Cocoanetics NSString+HTML 类别和方法 stringByReplacingHTMLEntities 方法。您可以在以下位置找到它:

https://github.com/Cocoanetics/NSAttributedString-Additions-for-HTML/blob/master/Classes/NSString%2BHTML.m

这是很多 HTML 实体及其对应的 unicode 字符的相当不错的列表。

于 2011-02-16T14:02:59.193 回答
0

尝试使用这段代码:

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

  NSString *decodedString = [NSString stringWithUTF8String:[responseString cStringUsingEncoding:[NSString defaultCStringEncoding]]];


  NSLog(@"response %@", decodedString);


  // array from the JSON string
  NSArray *results = [decodedString JSONValue];
于 2011-02-16T14:07:03.543 回答
0

我认为有一个混乱。

π是一个与文本编码(如 UTF8 / Latin )无关的HTML 实体。

有关...的详细信息,请阅读维基百科

您需要一个解析器来解码这些实体,就像 Chiefly Izzy 之前提到的那样:

NSString+HTML category and method stringByReplacingHTMLEntities
于 2011-02-17T07:48:18.503 回答
0

我遇到了同样的问题,但我通过更改 JSON 解析器解决了它。我已经开始使用 SBJSONParser,现在我得到了适当的结果。这是我用过的代码片段

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"POST"];

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
SBJSON *parser=[[SBJSON alloc]init];
NSArray *JSONData = (NSArray*)[parser objectWithString:returnString error:nil];
于 2011-02-17T07:57:43.287 回答