IOS實現(xiàn)TXT文本自動識別編碼的方法。

TXT識別編碼是個復雜的問題。幸好有c/c++的一個庫能識別。

成都創(chuàng)新互聯(lián)成立于2013年,先為雙牌等服務建站,雙牌等地企業(yè),進行企業(yè)商務咨詢服務。為雙牌企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務解決您的所有建站問題。

庫的叫uchardet,可以自己去github下載。但是沒有具體的使用手冊什么的。小研究了下 。

把uchardet文件夾下的.h和.cpp和.tab文件全部copy到自己的應用里面。然后在要自動識別編碼的地方

#include"uchardet.h"

如下代碼實現(xiàn)。

//

//  EBOOKReadViewController.m

//  EBOOk

//

//  Created by 趙鋒 on 13-12-18.

//  Copyright (c) 2013年趙鋒. All rights reserved.

//

#import"EBOOKReadViewController.h"

#include"uchardet.h"

#define NUMBER_OF_SAMPLES   (2048)

@interfaceEBOOKReadViewController ()

{

constchar *encode;

}

@end

@implementation EBOOKReadViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

{

self = [superinitWithNibName:nibNameOrNil bundle:nibBundleOrNil];

if (self) {

// Custom initialization

   }

returnself;

}

- (void)viewDidLoad

{

   [superviewDidLoad];

NSString *path=[[NSBundlemainBundle] pathForResource:@"五界至尊" ofType:@"txt"];

int result=[selfhaveTextBianMa:[path UTF8String]];

CFStringEncoding cfEncode = 0;

if (result==0) {

NSString *encodeStr=[[NSStringalloc]initWithCString:encodeencoding:NSUTF8StringEncoding];

if ([encodeStr isEqualToString:@"gb18030"]) {

           cfEncode=kCFStringEncodingGB_18030_2000;

       }elseif([encodeStr isEqualToString:@"Big5"]){

           cfEncode= kCFStringEncodingBig5;

       }elseif([encodeStr isEqualToString:@"UTF-8"]){

           cfEncode= kCFStringEncodingUTF8;

       }elseif([encodeStr isEqualToString:@"Shift_JIS"]){

           cfEncode=kCFStringEncodingShiftJIS;

       }elseif([encodeStr isEqualToString:@"windows-1252"]){

           cfEncode=kCFStringEncodingWindowsLatin1;

       }elseif([encodeStr isEqualToString:@"x-euc-tw"]){

           cfEncode= kCFStringEncodingEUC_TW;

       }elseif([encodeStr isEqualToString:@"EUC-KR"]){

           cfEncode= kCFStringEncodingEUC_KR;

       }elseif([encodeStr isEqualToString:@"EUC-JP"]){

           cfEncode= kCFStringEncodingEUC_JP;

       }

   }

NSError *err;

NSString *str=[NSStringstringWithContentsOfFile:pathencoding:CFStringConvertEncodingToNSStringEncoding(cfEncode)error:&err];

NSString *st=[str substringToIndex:1000];

self.txtView.text=st;

}

-(int)haveTextBianMa:(constchar*)strTxtPath{

FILE* file;

char buf[NUMBER_OF_SAMPLES];

size_t len;

uchardet_t ud;

/*打開被檢測文本文件,并讀取一定數(shù)量的樣本字符 */

   file = fopen(strTxtPath, "rt");

if (file==NULL) {

printf("文件打開失??!\n");

return1;

   }

   len = fread(buf, sizeof(char), NUMBER_OF_SAMPLES, file);

fclose(file);

   ud = uchardet_new();

if(uchardet_handle_data(ud, buf, len) !=0)

   {

printf("分析編碼失??!\n");

return -1;

   }

uchardet_data_end(ud);

printf("文本的編碼方式是%s。\n",uchardet_get_charset(ud));  

encode=uchardet_get_charset(ud);

uchardet_delete(ud);

return0;

}

- (void)didReceiveMemoryWarning

{

   [superdidReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

@end

網(wǎng)站名稱:IOS實現(xiàn)TXT文本自動識別編碼的方法。
URL鏈接:http://bm7419.com/article8/iidoop.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供微信公眾號、微信小程序、ChatGPT企業(yè)網(wǎng)站制作、關鍵詞優(yōu)化、手機網(wǎng)站建設

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設