我正在读取一个rtf文件,但输出结果显示包含标签的简单字符串,它不会显示为NSAttributedString
,因为它应该
这是我的代码
if let rtfPath = Bundle.main.url(forResource: "SampleHTML", withExtension: "rtf") {
do {
let attributedStringWithRtf: NSAttributedString =
try NSAttributedString(url: rtfPath, options: [NSAttributedString.DocumentReadingOptionKey.documentType:
NSAttributedString.DocumentType.rtf], documentAttributes: nil)
}catch let error {
print("Got an error \(error)")
}
}
在读取文件后,它将属性字符串显示为:
< p> em>查看以下信息。然后选择最佳答案并单击<强>提交< /强取代。回答后,点击< strong>下一个问题< /强>继续前进。< / EM>< / p为H. 。
我在标签中插入空格以澄清问题,没有空格StackOverflow将标签应用于文本,我在这里缺少什么?
答案 0 :(得分:1)
在您获得RTF到NSAttributedString
之后(您可以使用SO的代码标记来避免解释HTML标记):
<p><em>Review the following information. Then select the best answer and click <strong>Submit</strong>. After answering, click <strong>Next Question</strong> to move forward.</em></p>
现在,您有一个HTML AttributedString
和RTF一样,有一种方法可以从HTML字符串中获取NSAttributedString
。
因此,让我们首先获得HTML字符串:let htmlString = attributedStringWithRtf.string
对于其他方法,该方法与使用的方法几乎相同,更改为:NSAttributedString.DocumentType.html
而不是NSAttributedString.DocumentType.rtf
(似乎很明显),并且有一个带data
的init而不是路径,所以你只需要使用let htmlData = htmlString.data(using:.utf8)
所以代码:
let rtfPath = Bundle.main.url(forResource: "SampleHTML", withExtension: "rtf")
let attributedStringWithRtf: NSAttributedString = NSAttributedString(url: rtfPath, options: [NSAttributedString.DocumentReadingOptionKey.documentType: NSAttributedString.DocumentType.rtf], documentAttributes: nil)
let htmlString = attributedStringWithRtf.string
let htmlData = htmlString.data(using:.utf8)
let attributedString: NSAttributedString = NSAttributedString(data: htmlData, options: [NSAttributedString.DocumentReadingOptionKey.documentType: NSAttributedString.DocumentType.html], documentAttributes: nil)
注意:我没有故意使用if let
,try
/ catch
,因为您已经正确使用它们,我对此更感兴趣在你的问题背后的逻辑以及如何摆脱它。
现在,经过评论讨论后:
您将HTML文本(即带有HTML标记)保存到RTF文件中。
很明显,这太过分了,因为正如你在解决方案中看到的那样,我给你做了两次转换以获得最终NSAttributedString
。
所以,我要做的就是使用完全RTF文件,并将RTF标记设置为<p>
,<em>
,<strong>
等等,而不是HTML。
使用简单的.txt
保存HTML字符串(带有HTML标记)。
例如,我使用 TextEdit.app 保存了一个RTF文件,真正的内容是:
{\rtf1\ansi\ansicpg1252\cocoartf1504\cocoasubrtf830
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
{\*\expandedcolortbl;;}
\paperw11900\paperh16840\margl1440\margr1440\vieww10800\viewh8400\viewkind0
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0
\f0\fs24 \cf0 myText}
我刚写了myText
,RTF添加了很多if自己的标签。