我有一个AttributedString,可以通过程序使用名称和地址生成。两者都可以包含变音符号,例如é,ü,î等。它们可以在NSTextView中正确显示(这在macOS上)
但是,当我将其另存为RTF文档时,Apple并没有使用适当的RTF编码替换变音符号,因此Grüter突然变为Grüter。 ü的正确rtf编码为\'fc

我已仔细检查了Apple的RTF Files and Attributed StringsFormatted Documents and Attributed Strings文档以及NSCharacterEncodingDocumentAttribute均无济于事。
我已经将基本的unicode值写入了RTF标签编码器,但目前被复合unicode标量所困扰,例如💐

也许我遗漏了一些显而易见的东西,或者这是Apple RTF编写实现中的错误?

最佳答案

好的,我在https://github.com/axello/AttributedRTF上创建了一个游乐场,以弄清自己做错了什么。我想到了。

首先,我做错了什么:我将RTF文本导入到String中,以操纵某些标签并插入新文本。我在字符串级别执行此操作,以保持RTF标签完整。这适用于所有标签和ASCII文本。

但是,当我随后导出该字符串时,所有带有变音符号的插入字符串都不会转换为它们正确的RTF代码,因为它假定该字符串只是一堆数据。

在我的操场上,您可以玩这个游戏:


localString():仅将AttributedString导出为RTF;
templateString():读取String中的RTF模板,进行操作,然后编写RTF。这是错误的;
templateAttributedString():将RTF模板读入AttributedString,进行操作,然后将AttributedString导出为RTF。


简而言之:我不需要导入为String,而是导入为AttributedString,然后插入AttributedStrings,这比较麻烦。然后,我可以将AttributedString导出为RTF,并将变音符号正确转换为RTF。

关于swift - 如何快速将带有变音符号的AttributedString保存为适当的RTF?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48355968/

10-13 05:25