iOS:检测文件编码的最佳方法是什么

时间:2013-09-17 13:41:08

标签: ios encoding utf-8 gb2312 big5

在某些情况下,我真的需要在读取文件时知道文件的编码。有时我们可以Apple's String Programming Guide suggest :

  

使用未知编码读取数据

     

如果您发现自己有未知编码的文字,最好这样做   确保有一种纠正不可避免的错误的机制。   例如,Apple的Mail和Safari应用程序具有编码菜单,   和TextEdit允许用户显式重新打开文件   指定的编码。

     

如果你被迫猜测编码(并注意在没有   明确的信息,这是一个猜测):

     
      
  1. 尝试stringWithContentsOfFile:usedEncoding:error:或initWithContentsOfFile:usedEncoding:error :(或基于URL的   当量)。

         

    这些方法尝试确定资源的编码,以及if   通过引用成功返回使用的编码。

  2.   
  3. 如果(1)失败,请尝试通过指定UTF-8作为编码来读取资源。

  4.   
  5. 如果(2)失败,请尝试适当的遗留编码。

         

    “适当”这取决于具体情况;它可能是   默认C字符串编码,可能是ISO或Windows Latin 1,或   别的东西,取决于你的数据来自哪里。

  6.   
  7. 最后,您可以从Application Kit尝试NSAttributedString的加载方法(例如   initWithURL:选择:documentAttributes:错误:)

         

    这些方法尝试加载纯文本文件,并返回   使用的编码。它们可以用于或多或少的任意文本   文件,如果您的申请没有,则值得考虑   文本方面的专业知识。它们可能不适合   基础级工具或非自然语言的文档   文本。

  8.   

在这里我遇到了一些问题。有时我可以知道错误。例如,当我使用UTF8方式读取GB2312编码文件时,我会得到nil,所以我知道错误。但是当我用BIG5方式读取GB2312编码文件时,我无法知道错误。

NSAttributedString的init方法可以在Mac上运行,但是当涉及iOS时,它需要iOS7,不太好。

我也搜索它并找到一些关于它的讨论,如this on cocoabuilder,但也在Mac上。那么在iOS上怎么样?

1 个答案:

答案 0 :(得分:1)

您可以使用stringWithContentsOfFile:usedEncoding:error :,除了新字符串外,还返回使用的编码。

但您无法始终确定文件的编码。