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; }
相关文章推荐
- HTML5: Screen Orientation API
- leetcode_64题——Minimum Path Sum(动态规划)
- .NET开源项目
- 模仿登陆,记住密码
- POJ 1003
- Android 解决系统大号字体导致布局显示错乱问题
- MySQL 数据库 数据表 编辑
- win7系统管理员被禁用了怎么办
- Java对象及内存管理
- 详细整理:UITableView优化技巧
- 新工作
- Eclipse for Mac 常用快捷键
- intellij开发安卓与genymotion配合
- qt屏蔽关闭窗口事件
- cocos-js项目结构
- 测试博文发布
- 测试博文发
- JavaScript面试问题:事件委托和this
- 有趣的JavaScript原生数组函数
- 通过<frameset>和<iframe>看JavaScript中window对象parent、self、top的区别