【问题标题】:How to read file into NSSrting without encoding?如何在不编码的情况下将文件读入 NSSrting?
【发布时间】:2016-08-14 06:33:42
【问题描述】:

我有一些带有重音字符的文本文件,但我不知道编码,我希望文本在 NSTextField 中按原样显示。

我可以使用 [NSString stringWithContentsOfFile:] 但此方法已被弃用。所有其他方法都需要用户提供文本编码。我不想使用任何试图猜测编码的方法,因为:1.它们不会一直工作,2.我真的只想以 NSTextField 中的方式显示文件的内容.

那我该怎么办?

【问题讨论】:

  • 这行不通,因为它会去除文本中的重音符号。

标签: cocoa text encoding nsstring


【解决方案1】:

我真的只是想以 NSTextField 中的方式显示文件的内容。

你问的是不可能的,“它的方式”取决于编码。该文件包含一个字节序列,它们只是由八个 0 和 1 组成的字符串。您必须解释这些位串。您可以一次取四个并将它们解释为 32 位整数、32 位浮点数或 UTF32——每次都会得到不同的结果。或者您可以一次获取一个,并将它们解释为 ASCII、UTF、EBCDIC 等,等等,等等,您会得到不同的结果。

您最接近“现状”的方式是将字节转储为二进制、八进制或十六进制——即od 命令行命令将为您执行的操作。您可以尝试弄清楚,例如正如file 命令所做的那样,或者您需要知道。 (另见this question。)

【讨论】:

  • 我试图阅读的文本文件是一个 SRT 字幕文件。它可能包含这样的内容:“ 1 00:03:45,589 --> 00:03:48,822 Serve aiuto! C'Ë nessuno?” 由于我不知道 SRT 文本的编码,我怎么可能阅读它使用特定的字符编码?不推荐使用的方法允许我将原始文本文件按原样读入 NSString
  • 如果我按照您的想法行事,您的方法是错误的,请参阅您的related qestion
  • BRW 已弃用的方法 stringWithContentsOfFile:,不允许您按原样阅读;而是通过确定编码或使用默认编码来解释文件的内容 - 检查其documentation
【解决方案2】:

我最终使用了:

[NSString stringWithContentsOfFile:filePath encoding:[NSString defaultCStringEncoding] error:nil]

这给了我与[NSString stringWithContentsOfFile:]相同的结果

【讨论】:

  • 你与这个答案自相矛盾..你不想“猜测”,但这就是你现在要做的;)——正确猜测的方法也比你的“假设”更好
  • 最后,我尝试先使用 UTF8,然后使用 defaultCStringEncoding。这似乎适用于我正在做的事情的意图和目的。这与我从 [NSString stringWithContentsOfFile:] 得到的结果相同
猜你喜欢
  • 1970-01-01
  • 2019-07-09
  • 1970-01-01
  • 2019-11-29
  • 2011-05-16
  • 1970-01-01
  • 1970-01-01
  • 2016-05-27
  • 2019-05-07
相关资源
最近更新 更多