iOS读取本地txt文件为乱码的解决方法

来源:互联网 发布:4g网络接收器 编辑:程序博客网 时间:2024/06/05 05:56

在使用QLPreviewController展示TXT等文档时,Windows下生成的UTF-8格式的文件会出现中文(以及其他特殊字符)乱码的问题。

一开始以为是因为文档需要转码,在尝试多次无果后,在StackOverFlow上找到了答案,原答链接如下:QLPreviewController and UTF8 characters

解决要点在于

  1. QLPreviewController只有在UTF16的编码下才能正确显示中文,因此我们需要在展示文件之前将文件的编码改为UTF16

  2. 需针对ANSI编码和Unicode编码分别进行解码

详细代码如下:

```objc

  • (id )previewController: (QLPreviewController *)controller previewItemAtIndex:(NSInteger)index
    {
    NSString *filePath = _previewItem[@”filePath”];

    NSData *fileData = [NSData dataWithContentsOfFile:filePath];

    //判断是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:filePath atomically:YES];

    }
    else if(isANSI){

    NSData *data = [isANSI dataUsingEncoding:NSUTF16StringEncoding]; 
    [data writeToFile:filePath atomically:YES];

    }

    QLPreviewCustomItem *item = [[QLPreviewCustomItem alloc]initWithTitle:_previewItem[@”fileName”]

    url:[NSURL fileURLWithPath:_previewItem[@"filePath"]]];

    return item;
    }

0 0
原创粉丝点击