如何在变速器中将带有变音符号的AttributedString保存为正确的RTF?

时间:2018-01-20 12:09:39

标签: swift macos unicode nsattributedstring rtf

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

我仔细检查了Apple的RTF Files and Attributed StringsFormatted Documents and Attributed Strings文档以及NSCharacterEncodingDocumentAttribute无济于事。 我已经为RTF标签编码器写了一个基本的unicode值,但我目前只使用复合unicode标量,比如

也许我错过了一些完全明显的东西,或者这是Apple的RTF编写实现中的错误?

1 个答案:

答案 0 :(得分:0)

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

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

然而,当我随后导出字符串时,带有变音符号的所有插入字符串都没有转换为正确的RTF代码,因为它假设字符串只是一堆数据。

在我的操场上你可以玩这个:

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

简而言之:我需要导入不是作为字符串,而是作为AttributedString,并插入AttributedStrings,这稍微麻烦一些。然后我可以导出将AttributedString作为RTF,并将变音符号正确转换为RTF。