将带有unicode字符的NSString转换为有效的HTML

时间:2014-06-17 15:42:49

标签: html ios objective-c unicode

我从API中获取了一个包含锚标记的字符串,因此我从中创建NSAttributedString,并将其显示在UITextView中,以便我可以支持可点击链接。

问题是传入的字符串不是有效的HTML,因此它中包含未转义的unicode字符。比如:

  • HORIZONTAL ELLIPSIS Unicode:U + 2026,UTF-8:E2 80 A6
  • EM DASH Unicode:U + 2014,UTF-8:E2 80 94

虽然我可以处理这些特定情况,但我担心任何其他的unicode字符,我目前还不知道。

示例:

NSString *fromAPI = @"Reagan \U2014 saying";
NSDictionary *options = @{NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType};
NSData *data = [fromAPI dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:NO];
NSAttributedString *attributedString = [[NSAttributedString alloc] initWithData:data options:options documentAttributes:nil error:nil];

这在UITextView中呈现为:enter image description here

如何让它正确渲染em破折号和其他unicode?

2 个答案:

答案 0 :(得分:7)

发现它,看起来HTML不会渲染unicode,除非你将其添加到<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

答案 1 :(得分:-1)

我要建议的(如果我已正确理解了这个问题)是使用正则表达式或其他东西将转义字符\U0000FE0E或仅\UFE0E添加到所有未转义的unicode的末尾字符,例如:

NSString *fromAPI = @"Reagan \U2014 saying";
NSString *convertedFromAPI = @"Reagan \U2014\UFE0E saying";

但我认为你现在所做的事情更有意义。