gpt4 book ai didi

ios - 服务器的引号 (") appears as "â"在 iOS 应用程序中

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:48:21 25 4
gpt4 key购买 nike

我目前正在编写一个从 PHP echo 读取数据的 iOS 应用程序。在对每个字符进行多次转义之后,我求助于 PHP 函数 UTF8_Encode

这似乎工作得很好,但是当我在输出中有一个引号 (") 时,它在应用程序中显示为 â


从 PHP 应用程序发送提要的代码是:

echo (UTF8_encode($variable));

在 iOS 应用程序中使用此提要的代码是:

NSString *urlString = [NSString stringWithFormat:@"thisisalink"];
NSURL *url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSData *returnData = [NSData dataWithContentsOfURL:url];
NSString *strResult = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];

最佳答案

看到 â 的问题源于使用弯引号(例如 而不是 ")和字符集之间的一些断开服务器传输的编码和iOS应用程序处理的字符集编码。

我无法准确重现你的问题,但我可以通过故意滥用 NSISOLatin1StringEncoding 而不是 NSUTF8StringEncoding:

NSData *data = [NSData dataWithContentsOfURL:url];
NSString *string = [[NSString alloc] initWithData:data encoding:NSISOLatin1StringEncoding]; // this won't work
NSLog(@"data = %@, string = %@", data, string);

我的服务器发送的不是预期的 “x” 响应,而是生成以下输出:

data = <e2809c78 e2809d>, results = âxâ

前三个字节 (0xe2809c) 代表左引号字符,0x78 代表字母 x,最后三个字节 ( 0xe2809d) 表示结束引号字符。最重要的是,如您所见,Objective-C 不知道该怎么做。

有几个解决方案:

  1. 从服务器的响应中删除这些扩展的 unicode 字符。

  2. 确保服务器响应的字符集与客户端解析响应的字符集匹配。

  3. 或者,您可以使用为您执行此转换的文件格式。例如,我使用了 PHP json_encode 函数,它负责转换字符集:

    echo json_encode(array("response" => $variable));

    然后我使用以下 Objective-C 代码在 iOS 中解析它:

    NSData *data = [NSData dataWithContentsOfURL:url];
    NSLog(@"%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);

    报告的 JSON 响应如下所示:

    {"response":"\u201cx\u201d"}

    然后您可以像这样解析该 JSON:

    NSError *error = nil;
    NSDictionary *results = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

    if (!error)
    NSLog(@"%@", results[@"response"]);
    else
    NSLog(@"Unable to parse: error = %@", error);

    如您最初预期的那样,报告如下:

    “x”

就我个人而言,当我的服务器发送数据供我的应用程序解析时,我总是使用专为机器对机器接口(interface)设计的格式,例如 JSON 或 XML。这让我可以将结构化的响应放在一起,更容易报告错误,解决许多文本格式问题等。

关于ios - 服务器的引号 (") appears as "â"在 iOS 应用程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16545684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com