2017011617670read_header.jpg

Apple官方文档: Reading data with an unknown encoding

  1. 先尝试Try stringWithContentsOfFile:usedEncoding:error: 或者initWithContentsOfFile:usedEncoding:error:方法。 这些方法会试图获取文件的编码,如果成功返回引用的编码使用。

        NSError *error ;
        NSStringEncoding encoding;
        NSString *content = [NSString stringWithContentsOfFile:path usedEncoding:&encoding error:&error];
        if (error == nil) {
            NSLog(@"编码格式 %lu",encoding); //如utf-8编码的会得到4
        }
  2. 如果(1)失败。尝试直接用UTF-8的编码方式

  3. 如果(2)失败。尝试使用其他适当的编码,编码方式取决你的数据来源。

  4. 如果(3)失败。请尝试使用NSAttributedString的方法。比如:initWithURL:options:documentAttributes:error:


打开txt文件

我下载了本小说:mac上打不开这个txt文件

2017011670078novel.png

修改文本编辑的偏好设置后可以用文本编辑打开 2017011665439txt偏好设置.png

oc代码示例

- (void)readTxtFromPath:(NSString *)path{
    
    //GBK
    unsigned long encode = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
    
    NSError *error ;
    NSString *content = [NSString stringWithContentsOfFile:path encoding:encode error:&error];
    
    if (error) {
        NSLog(@"%@",error);
    }else{
        NSLog(@"content --%@",content);
    }
}

swift 代码:

let path = Bundle.main.path(forResource: "蛇城", ofType: "txt");

let cfEnc = CFStringEncodings.GB_18030_2000
let enc = CFStringConvertEncodingToNSStringEncoding(CFStringEncoding(cfEnc.rawValue))

do {
  let ret = try NSString.init(contentsOfFile: path!, encoding: enc)
  print(ret)
}catch let error as NSError {
  print(error)
}