您的位置:首页 > 其它

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

2015-06-08 09:37 381 查看
// 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: