【问题标题】:Detect â in a string在字符串中检测 â
【发布时间】: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


【解决方案1】:

转储中的字节e2 97 8f 是U+25CF 的UTF8 编码,黑色圆圈。当解释为 ISO-8859 或 Windows-1252 时,e2 是 â(抑扬符),97 是一个破折号,8f 未使用。

这表明 JSON 本身是 UTF8 并且某个地方的解释不同,可能是上述编码之一。您需要检查您的代码和完整的服务器响应(有关后者导致问题的示例,请参阅问题JSON character encoding)。

【讨论】:

  • 做到了!您的解释对我所看到的也很有意义,感谢您的帮助和清晰的解释!
【解决方案2】:

我正在尝试检测字符串中的字符 â

您的文本中没有“â”,因此没有什么可检测的。 e2 97 8f 是一个项目符号字符“●”。你的问题是你没有正确设置编码。

【讨论】:

    猜你喜欢
    • 2018-12-15
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多