QLPreviewController 展示TXT文本时中文乱码的解决方法

// returns the item that the preview controller should preview
- (id)previewController:(QLPreviewController *)previewController previewItemAtIndex:(NSInteger)idx
{
    
    /**
     *  在使用QLPreviewController展示TXT等文档时,Windows下生成的UTF-8格式的文件会出现中文(以及其他特殊字符)乱码的问题。
     
     一开始以为是因为文档需要转码,在尝试多次无果后,在StackOverFlow上找到了答案,原答链接如下:QLPreviewController and UTF8 characters
     
     解决要点在于:
     
     QLPreviewController只有在UTF16的编码下才能正确显示中文,因此我们需要在展示文件之前将文件的编码改为UTF16
     
     需针对ANSI编码和Unicode编码分别进行解码
     */
    
    NSURL *fileURL = nil;
    NSIndexPath *selectedIndexPath = [_tableV indexPathForSelectedRow];
    
    NSString *documentDir = [ZJD_FileManageUnit userFolder:@"Resource/Own"];
    NSString *path = [documentDir stringByAppendingPathComponent:[_arData3 objectAtIndex:selectedIndexPath.row]];
    NSData *fileData = [NSData dataWithContentsOfFile:path];
  
    //判断是UNICODE编码
    NSString *isUNICODE = [[NSString alloc] initWithData:fileData encoding:NSUTF8StringEncoding];
    
    //还是ANSI编码
    NSString *isANSI = [[NSString alloc] initWithData:fileData encoding:-2147482062];
    
    if (isUNICODE) {
        
        NSString *retStr = [[NSString alloc]initWithCString:[isUNICODE UTF8String] encoding:NSUTF8StringEncoding];
        
        NSData *data = [retStr dataUsingEncoding:NSUTF16StringEncoding];
        
        [data writeToFile:path atomically:YES];
    }
    else if(isANSI){
        
        NSData *data = [isANSI dataUsingEncoding:NSUTF16StringEncoding];
        
        [data writeToFile:path atomically:YES];
    }
    
    fileURL = [NSURL fileURLWithPath:path];
    
    return fileURL;
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值