【问题标题】:How to find and replace a particular unicode character with a non-unicode character in an NSString?如何在 NSString 中用非 unicode 字符查找和替换特定的 unicode 字符?
【发布时间】:2016-05-20 03:56:18
【问题描述】:

我收到了一个字符串,其中可能有一个 unicode 撇号 (\u2019),我必须用标准撇号(普通的旧“'”)替换它。我通常使用 stringByReplacingOccurrencesOfString 来做这种事情,但尝试这样做不起作用:

sMyString = [sMyString stringByReplacingOccurrencesOfString:@"\\u2019" withString:@"'"];

我猜它不起作用是有道理的,因为在 NSString 内部表示撇号的实际值将是数字。有人知道怎么做吗?

【问题讨论】:

  • 字符串是否有一个实际的 字符,还是有字符\、u2019
  • 当我在 Xcode 的控制台中使用 po sMyString 时,它显示为一个实际的 ' 字符,尽管如您所展示的那样弯曲。但是,当该字符串是字典的一部分并且我使用 po 打印出字典时,它会显示序列,所以 Mama's boy 看起来像:Mama\u2019s boy。我就是这样发现它的。
  • 记录字典会导致\uxxxx 输出大量字符。这只是Apple混淆开发人员的愚蠢决定。听起来您的字符串具有实际的引号字符。我发布的答案应该可以满足您的要求。

标签: objective-c unicode replace nsstring nsstringencoding


【解决方案1】:
sMyString = [sMyString stringByReplacingOccurrencesOfString:@"\U2019" withString:@"'"];

不要使用\U2019,会出错。

【讨论】:

  • 使用 \u2019 而不是 \U2019。我使用的是 \U2019 它给出了错误不完整的通用字符名称。
【解决方案2】:

如果sMyString 具有实际的 字符,则执行以下任一操作:

sMyString = [sMyString stringByReplacingOccurrencesOfString:@"\u2019" withString:@"'"];

或:

sMyString = [sMyString stringByReplacingOccurrencesOfString:@"’" withString:@"'"];

这两者实际上都编译成相同的代码。 \u2019 在编译期间被 替换。

【讨论】:

  • 绝对正确。当。我在那里有额外的反斜杠,这就是为什么它没有找到它。将其删除,使其看起来像您的代码并且像冠军一样工作。非常感谢。
  • 使用额外的反斜杠,匹配只有在字符串包含实际文本\u2019时才有效。
猜你喜欢
  • 1970-01-01
  • 2017-12-17
  • 1970-01-01
  • 2015-09-09
  • 2021-04-14
  • 1970-01-01
  • 2018-12-16
  • 2018-04-19
  • 2011-04-26
相关资源
最近更新 更多