【问题标题】:How to display accented characters using NSMutableAttributedString?如何使用 NSMutableAttributedString 显示重音字符?
【发布时间】:2016-08-14 08:45:28
【问题描述】:

在我的NSString 中,我有一些重音字符和html 标签,例如<i></i>。我想在NSTextField 中显示它们,并带有文本属性。

当我构建 attrStr 时,我使用:

NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithHTML:[text dataUsingEncoding:NSUTF8StringEncoding]
                                                                   options:@{NSWebPreferencesDocumentOption : webPreferences}
                                                        documentAttributes:NULL];

我显示的文字如下:

someTextField.attributedStringValue = attrStr;

但这需要我知道NSString的编码,但问题是我不知道编码。那么如何在不知道编码的情况下构建属性字符串呢?

【问题讨论】:

    标签: html cocoa encoding nsstring


    【解决方案1】:

    您不需要知道NSString 的编码——它是一个Objective-C 字符串。 dataUsingEncoding: 的定义声明,强调:

    返回一个NSData 对象,其中包含使用给定编码进行编码的接收者的表示

    此方法将NSString 内部使用的任何编码转换为 指定的编码——因此结果是您的情况是包含UTF8 字符串字节的NSData

    如果您看到无效结果,则问题可能出在您创建原始 NSString 时?

    HTH

    附录我现在看到你先问了this question(我添加了一个答案——基本上你需要知道或猜测)。你为什么首先将文件读入NSString?只需将其直接读入NSData,然后让 HTML 解析器对其进行排序(它将读取 HTML 编码标记或默认为编码)。

    【讨论】:

    • 嗯,事情没那么简单。如果我将其作为 NSData 读取,则无法解析 NSData 以提取特定时间范围内的字幕字符串。但是为了以字符串形式读取文件,我需要知道编码,这是我不知道的。也许我需要查看 VLC 的源代码,看看他们是如何做到这一点的。无论字幕文本中使用何种编码,VLC 似乎都能正确解码字幕。
    • 简短的 DuckDuckGo 建议 SRT 文件的编码未定义,VLC 将其描述为“非正式的 Unicode”,但正如您所建议的,它的来源可能对您有所帮助,因为它似乎可以处理(一些?)非Unicode 文件。是时候做一些研究了。打猎很好!
    • 事实证明,VLC 无法正确解码所有内容,但 Mac 蓝光播放器可以。
    【解决方案2】:

    最后,我发现如果我在上面使用NSUnicodeStringEncoding,重音字符会正确显示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-23
      • 1970-01-01
      • 2015-01-09
      • 1970-01-01
      • 2010-11-16
      相关资源
      最近更新 更多