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



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

我已经仔细检查了Apple的RTF文件和属性字符串以及格式化文档和属性字符串文档以及NSCharacterEncodingDocumentAttribute无济于事。 我已经为 RTF 标签编码器编写了一个基本的 unicode 值,但目前坚持使用复合 unicode 标量,例如 💐

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

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

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

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

在我的游乐场里,你可以玩这个:

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

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

最新更新