Contents

조회 수 274 추천 수 0 댓글 0
Atachment
첨부 '4'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
이글은 devcel님께서 올리신 글입니다. 

다시 보니까 웹뷰 릴리즈를 안했네요, 가져다 쓰시는 파일하고는 상관없어서 그냥 둘게요~~

웹뷰에서 txt파일 직접 링크를 선택해서, 바로 웹뷰상에서 txt파일이 표시될때
한글이 정상적으로 표시되지 않는 문제입니다.

이곳에 질문하셔서 좀 더 찾아봤는데, 관련된 내용이 없네요...
암튼 만들어 올립니다.

WebControl1.png

이렇게 표시되는걸, 정상적으로 변경합니다.

WebControl2.png

요즘 txt파일 인코딩이 아마도 두가지로 사용되고 있을거에요.
맥에서 작성한 txt파일과, 윈도우즈에서 작성한 txt파일두가지가 있는데,
맥에서 작성한 파일은 제대로 표시되는것도 있고 아닌것도 있고 합니다.
윈도우즈에서 작성한 txt파일은 100% 깨져서 나오구요.

웹뷰의 shouldStartLoadWithRequest 에서 request를 가로채야합니다.
확인해서 txt파일로 넘어가고 있으면, 
웹뷰와 별도로 해당 데이터를 전부 받아온뒤에
txt파일 인코딩을 재치에 맞춰서(윈도우,맥) 한번 변경한뒤에,
utf8로 다시 변경하고, 윈도우 개행문자 인식하게 <pre style ..> 지정해서 html로 감싼뒤에
웹뷰에 다시 뿌려줍니다. html style 지정하지 않으면 공백이 전부 무시되니 변경하지 않으시는게 좋습니다.


결과는 정상적으로 표시되네요^^

프로젝트파일은 이것 받으시면 됩니다.

DVTextEncoding.h / DVTextEncoding.m 두개만 프로젝트로 복사하고 사용하시면 됩니다...

사용하는 웹뷰의 
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
델리게이트에서

NSString *requestURL = [NSString stringWithFormat:@"%@",[request URL]];

으로 현재 이동할려고 하는곳의 url을 잡을수 있습니다.
그리고 확인해서 txt파일로 이동하면

DVTextEncoding *dvEncoding = [[[DVTextEncoding alloc] init] autorelease];
dvEncoding.delegate = self;
[dvEncoding koreanWebText:requestURL webview:webView];

대충 이런식으로 넘겨주세요.

koreanWebText 에는, 위에서 검사할때 만든 txt파일이 있는 주소를 넘기시면 됩니다.
두번째 webView는 현재 리퀘스트한 웹뷰를 그대로 넘겨주세요.
인코딩이 끝나고 해당 웹뷰에 다시 표시합니다.

DVTextEncoding의 델리게이트를 받으셔야 합니다.

- (void)didEndEncoding:(UIWebView *)saveWeb dec:(NSData *)ed2;
- (void)didFailedEncoding;



위의 두가지 델리게이트를 날려주고, 두개 모두 필수입니다.

- (void)didFailedEncoding 의 경우는 정상적으로 가져오지 못할때니, 적당히 다른페이지로 넘기시거나 깨진채로 보여주면 됩니다 
급조하다 보니... 예외처리는 알아서들 해주세요 ) ;;

정상적으로 변환이 되면
- (void)didEndEncoding:(UIWebView *)saveWeb dec:(NSData *)ed2;
가 호출됩니다.
saveWeb은 위에서 호출할때 넘겨줬던 웹뷰의 인스턴스를 그대로 다시 돌려줍니다.
해당 웹뷰에 다시 뿌려주면 자연스럽게 넘어가겠지요
시간이 좀 걸리면, 깨진 글자가 화면에 미리 나오고, 변환된 글자로 알아서 다시 표시됩니다.

사용은 :
- (void)didEndEncoding:(UIWebView *)saveWeb dec:(NSData *)ed2{
[saveWeb loadData:ed2 
MIMEType:@"text/html"
textEncodingName:@"UTF-8"
baseURL:nil];
}

넘어오는 데이터가 UTF8로 인코딩된 NSData 에요. 문자열 아닙니다~
MIMEType은 text로 궂이 안하셔도 상관없구요.

암튼 즐거운 프로그래밍들 되셔요~ ^^


마음대로 쓰셔도 좋지만.. 포함 된 상단 주석은 절대로 삭제하지 말아주세요.

WebControl3.png

?