如何在不知道编码的情况下阅读文本文件

时间:2011-02-09 01:38:45

标签: iphone text encoding nsstring

当阅读在我的应用之外的其他地方创建的文本文件时,使用的编码是未知的。我的应用程序正在使用NSUnicodeStringEncoding(与NSUTF16StringEncoding相同),因此读取UTF16编码文件以外的其他问题。

有没有办法可以猜出文件的编码?我的首要任务是能够读取UTF8文件,然后读取所有其他文件。 迭代可用的编码并检查读取字符串的长度是否大于零真的是一个好方法吗?

提前致谢。

伊格纳西奥

2 个答案:

答案 0 :(得分:9)

Apple的文档提供了有关如何继续的一些指导:String Programming Guide: Reading data with an unknown encoding

  

如果您被迫猜测编码(请注意,如果没有明确的信息,那就是猜测):

     
      
  1. 尝试stringWithContentsOfFile:usedEncoding:error:initWithContentsOfFile:usedEncoding:error:(或基于网址的等价物)。   这些方法尝试确定资源的编码,如果成功通过引用返回使用的编码。

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

  4.   
  5. 如果(2)失败,请尝试适当的遗留编码。   这里的“适当”取决于具体情况;它可能是默认的C字符串编码,可能是ISO或Windows Latin 1,或其他内容,具体取决于数据的来源。

  6.   

答案 1 :(得分:1)

如果文件构造正确,您可以读取前四个字节并查看它是否是BOM(字节顺序标记):

http://en.wikipedia.org/wiki/Byte-order_mark