【问题标题】:Decoding ‘ in objective c在目标 c 中解码
【发布时间】:2013-03-15 13:14:35
【问题描述】:

我正在从 WebService 保存数据,并且某些信息具有 ASCII 字符,例如 ‘#038; 一开始我认为设置一个包含类似这样的字符的文本的字符串会很好地工作,因为还有其他的,比如重音符号\u00f3,在 UILabels 中出现解码,但那些 2 例如没有。

这是为什么?我理解正确吗?

谢谢。

【问题讨论】:

  • 字符串文字中的\u00f3 之类的转义在编译时进行评估。如果您有包含这些转义的运行时数据,它们将不会被解释。 ‘ 甚至不是字符串转义;它是一个 HTML 实体。

标签: objective-c ascii


【解决方案1】:

替换 HTML 实体

由于您正在从 WebService 保存数据,因此您可以使用此 NSString category for HTML,如本文所述:Objective-C: How to replace HTML entities?

(HTML 实体类似于:‘ - 更多关于wikipedia

类别中可用的方法有:

- (NSString *)stringByConvertingHTMLToPlainText;
- (NSString *)stringByDecodingHTMLEntities;
- (NSString *)stringByEncodingHTMLEntities;
- (NSString *)stringWithNewLinesAsBRs;
- (NSString *)stringByRemovingNewLinesAndWhitespace;



对 cme​​ts 的回应

[NSAttributedString initWithHTML: documentAttributes:]

从包含在给定数据对象中的 HTML 中初始化并返回一个新的 NSAttributedString 对象。

NSData* htmlData = [yourHTMLString dataUsingEncoding:NSUTF8StringEncoding]
NSAttributedString* theAttributedString = [[NSAttributedString alloc] initWithHTML:htmlData documentAttributes:NULL];

我一直都在使用它,而且效果很好。我什至用它做了一个宏:

#define html2AttributedString(htmlString)                                                                   \
    [[[NSAttributedString alloc] initWithHTML:[(htmlString) dataUsingEncoding:NSUTF8StringEncoding]         \
    documentAttributes:NULL] autorelease]

用法:

NSAttributedString* attributedString = html2AttributedString(yourNSString);

然后,您可以为颜色、对齐方式、字体等制作宏…

对于 iOS,您可以查看 this page,他们会在其中为您提供替代品。

我们的 initWithHTML 方法旨在完美匹配 Mac版。这对于角色来说是可能实现的,我有 单元测试到位,以确保它保持完美。 关于属性有很多事情要做 在 iOS 上略有不同以实现相同的外观。我不会打扰你 那里有详细信息。

【讨论】:

  • 我不是质疑-stringByDecodingHTMLEntities 的有效性,但是对于-stringByConvertingHTMLToPlainText,你不能直接从HTML 创建一个NSAttributedString 并取其字符串值吗?
  • @zneak 我只是引用了该类别的作者,列出了可用的方法。但是,是的,NSAttributedString 有一个很棒的方法initWithHTML: dataUsingEncoding:,可以用来从 HTML 代码构建一个属性字符串。实体以及标记确实会被解释(这就是我不建议这样做的原因)。似乎 OP 只想摆脱 html 实体。
  • 您能详细解释一下吗?我实际上需要解析任何类型的 HTML,我刚刚意识到 WS 有一些 html 标签。谢谢!
  • @DavidShaikh 完成。我添加了更多关于 NSAttributedString initWithHTML: documentAttributes:] 的信息。请注意,我上面的评论中有一个错误:当然不是 initWithHTML: dataUsingEncoding: 而是 initWithHTML: documentAttributes:
  • @DavidShaikh 不,但还有另一种方法。我相应地更新了我的答案。希望这会有所帮助。
猜你喜欢
  • 1970-01-01
  • 2013-07-31
  • 1970-01-01
  • 2016-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-22
相关资源
最近更新 更多