在UIWebView上显示中文文本文件

转载:http://blog.csdn.net/kmyhy/article/details/12276615


 UIWebView 支持文本文件的显示,你可以使用以下代码加载文本文件:

NSString* path=[[NSBundlemainBundle]pathForResource:@"48_1"ofType:@".txt"];

NSURL* url=[NSURLfileURLWithPath:path];

if(url)

        [_webviewloadRequest:[NSURLRequestrequestWithURL:url]];

很不幸,对于中文,UIWebView支持得并不是很好:

48_1.txt 文件中包含了中文,我们不知道它是什么编码,可能是 UTF8,也可能是 GBK 或 GB18030 。我们可以通过stringWithContentsOfFile 方法推断它的编码:

NSStringEncoding * usedEncoding = nil;

    int encoding;

    // BOM 头的如 utf-8这里会识别

    NSString *body = [NSStringstringWithContentsOfFile:pathusedEncoding:usedEncoding error:nil];

    if (!body)

    {

        //如果之前不能解码,现在使用GBK解码

        NSLog(@"GBK");

        encoding=0x80000632;

        body = [NSStringstringWithContentsOfFile:pathencoding:encoding error:nil];

    }

    if (!body) {

        //再使用GB18030解码

        NSLog(@"GBK18030");

        encoding=0x80000631;

        body = [NSStringstringWithContentsOfFile:pathencoding:encoding error:nil];

    }

   

然后将它们装换为 UTF16 编码并保存到新的文件中:

if (body) {

      url=[NSURLfileURLWithPath:pathForTemporaryFile(path.lastPathComponent)];

        NSData* inData=[body dataUsingEncoding:NSUTF16StringEncoding];

        [inData writeToURL:url atomically:YES];

    }

    else {

        NSLog(@"没有合适的编码");

    }

注意,pathForTemporaryFile 函数是我们自定义的。它实际上将文件指向了“沙盒”的 temp 文件夹。

这样,UIWebView 就能正确显示中文了:

但不知道为什么,UIWebView 在显示文本文件时,会将文件末尾的若干字节显示为方块。这些方块实际上是一些“\0”字符。当我用“文本编辑器”或TextMate 等程序打开 48_1.txt 文件时,这些“\0”字符都不会显示在屏幕上。但在 UIWebView 中,它们却被显示为方块。因此可以在保存文件前加上以下代码:

NSString* findStr=@"\0";

NSRange range=[body rangeOfString:findStr];

if (range.location!=NSNotFound) {

     body=[body substringToIndex:range.location];

}

这样,你就可以把那些方块除掉。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值