- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我目前正在编写一个从 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 不知道该怎么做。
有几个解决方案:
从服务器的响应中删除这些扩展的 unicode 字符。
确保服务器响应的字符集与客户端解析响应的字符集匹配。
或者,您可以使用为您执行此转换的文件格式。例如,我使用了 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/
我的 CSS 中有以下代码: header input{ width:100%; height:50px; float:left; color:fff; background: rgba(255,25
我一直在尝试使用外观代理 API 将一些默认颜色应用于某些控件,但我遇到了问题。 当我使用诸如...之类的东西将色调颜色应用到 UISegmentedControl 时 UISegmentedCont
我正在将其他人制作的一个现有的小型 Angular JS 应用程序集成到一个不是使用 Angular 构建的现有网站中。 所有 Angular JS 应用程序文件都保存在一个完全独立的目录中,然后用户
我的应用程序在调用 $(document).ready 后向 DOM 添加一些元素。我正在使用 jQuery 1.9.0 以下示例有效。 $(document).on("click", "#box-d
我是 jquery 方面的大菜鸟,我需要弄清楚如何更改此代码: $('.social li').appear(); $(document.body).on('appear', '.social li'
这个问题在这里已经有了答案: Z-index with before pseudo-element (2 个答案) Is it possible to set the stacking order
尽管MSDN和 MDN声明 IE11 似乎根本不支持 webkit-appearance。尝试将 -webkit-appearance 设置为任何声称支持的值时(none、button、textfie
当我尝试克隆 git 用户 HOME 之外的远程 git 时出现错误。 Cloning into test... fatal: '/media/raid/repo/test.git' does not
谁能明白为什么这个 html 代码不起作用。 当图像变得可见时,它应该显示警报,当图像对用户不可见时,它应该再次显示警报。 它也不适用于本地库。
我正在尝试访问 super 英雄 api,但对于某些数据,它一直显示数据未定义。 var html = ""; $.each(data.results,function(i,results){ ht
我需要编写一个小的正则表达式匹配器,它将匹配任何出现的字符串形式 [a-zA-Z]+(_[a-zA-Z0-9]+)? 如果我使用上面的正则表达式,它会匹配所需的部分,但也会匹配到 4_abc 的 ab
在我的网站上,我有多个组件充当每个单独页面的模板,例如“主页”、“关于我”等……我的目标是在每个页面之间实现滑动过渡,我已经使用过渡标签以及添加的“出现”属性和一些 CSS 实现了这一点。我的问题是,
我正在尝试将两个微调器放入工具栏(我正在使用协调器布局) 代码如下
我想让导航栏在使用关闭按钮关闭时消失,或者在关闭屏幕时让导航栏隐藏。 代码如下: - (void)viewDidLoad { [self.navigationController setNav
这个问题不太可能帮助任何 future 的访客;它只与一个小地理区域、一个特定时刻或一个非常狭窄的情况相关,而这些情况通常不适用于互联网的全局受众。如需帮助使这个问题更广泛地适用,visit the
感谢您阅读这个问题,我是 React 新手,我尝试做一个任务应用程序,所以我这样做。 App.js import React, { Component }from 'react' import Rea
我一直在尝试通过 jQuery 删除-webkit-appearance:none; 但没有任何效果。我尝试了以下方法: jQuery(document).ready(function(){ jQ
我为我的选择框设置了样式,它在 chrome 和 safari 上运行良好。 现在我的问题出在 FF 中,我仍然可以看到带有选择框的下拉箭头。 我试过引用this solutions和 this so
我刚刚自学 HTML 和 CSS,但遇到了我的第一个烦人的错误。 这是我的代码: http://pastebin.com/Rk6TjqKZ 到目前为止,这是我唯一的图像,它曾经出现过,但自从将一个类添
如果我能在任何地方找到这方面的任何信息,我就不会问这个问题。我检查了 w3schools、这个网站和谷歌。什么都没有。 那么,是否有一个 css -ms 等同于 -webkit-appearance?
我是一名优秀的程序员,十分优秀!