【发布时间】:2016-12-30 12:25:09
【问题描述】:
我试图在 Objective C 的字符串中检测字符 â,但似乎无法让它工作。当它最终显示在屏幕上时,它会显示一个要点,所以也许这就是我无法检测到它的原因?
在 iOS 10 中,这些要点显示得比它们应该显示的要大,所以我需要找到每个字符的范围,并将它们缩小一些。我尝试了以下方法:
[inputString contains:@"â"]
[inputString contains:@"•"]
[inputString contains:@"\u00b7"]
[inputString contains:@"\u2022"]
我最感兴趣的是当我从 API 响应中复制和粘贴时:[inputString contains:@"â "]。该字符串中实际上有 4 或 5 个空格,但是从我返回的 JSON 粘贴时它们会被截断——我不知道为什么,但我觉得这与为什么我无法识别包含该字符的字符串有关.
关于如何正确处理这个角色有什么想法吗?
编辑:更多细节,这是从 API 发回的字符串:
â All of your exclusive deals in one place\nâ More deals matched specifically to you\nâ Get alerts to know when new deals are available or your saved deals are expiring"
我也注意到了一些奇怪的事情,当我编辑响应并添加更多带帽子的 a 时,它们会被移动到项目符号中,但是当我将它们添加到代码中的字符串中时,它们会显示为简单的项目符号点。也许他们以某种方式被编码?虽然我在我们的代码中没有看到可能发生这种情况的任何地方,但我对这里发生的事情有点困惑。
编辑 2:这是该行的 hexdump,这对你们中的某些人可能比对我更有用:
000026c0 6e 74 65 6e 74 22 3a 20 22 e2 97 8f 20 41 6c 6c |ntent": "... All|
000026d0 20 6f 66 20 79 6f 75 72 20 65 78 63 6c 75 73 69 | of your exclusi|
000026e0 76 65 20 64 65 61 6c 73 20 69 6e 20 6f 6e 65 20 |ve deals in one |
000026f0 70 6c 61 63 65 5c 6e e2 97 8f 20 4d 6f 72 65 20 |place\n... More |
00002700 64 65 61 6c 73 20 6d 61 74 63 68 65 64 20 73 70 |deals matched sp|
00002710 65 63 69 66 69 63 61 6c 6c 79 20 74 6f 20 79 6f |ecifically to yo|
00002720 75 5c 6e e2 97 8f 20 47 65 74 20 61 6c 65 72 74 |u\n... Get alert|
00002730 73 20 74 6f 20 6b 6e 6f 77 20 77 68 65 6e 20 6e |s to know when n|
00002740 65 77 20 64 65 61 6c 73 20 61 72 65 20 61 76 61 |ew deals are ava|
00002750 69 6c 61 62 6c 65 20 6f 72 20 79 6f 75 72 20 73 |ilable or your s|
00002760 61 76 65 64 20 64 65 61 6c 73 20 61 72 65 20 65 |aved deals are e|
00002770 78 70 69 72 69 6e 67 22 2c 0d 0a 20 20 20 20 22 |xpiring",.. "|
【问题讨论】:
-
你能显示你的响应字符串吗?
-
您是否考虑过规范化字符串? objc.io/issues/9-strings/unicode/#normalization-forms
-
我尝试注销四种形式的规范化字符串,它们仍然成为我控制台中的项目符号
-
您几乎肯定会遇到 UTF-8 编码问题,尽管从提供的信息中很难知道在哪里(甚至可能是服务器端)。你能通过十六进制转储运行你的 API 调用的输出,看看你到底收到了什么吗?类似
curl address | hexdump -C并隔离相关位。另外,你能展示一下你用来获取数据并转换它的代码吗? -
我用来获取和转换它的代码都是RestKit。 RestKit 正在到达端点,只需将东西插入正确的属性。除了告诉 RestKit 将每个属性放在哪里之外,我没有做任何特别的事情。我正在粘贴我现在返回的字符串的 hexdump,我不确定如何读得好,但它似乎将“a”显示为省略号....
标签: ios objective-c ios10