Hide_D 님 안드로이드 HTML Viewer 소스, 인코딩 2번 변환해도 안되던데요? 블록

되는 방법을 알려주셔야지 되지도 않는 방법 알려주시면서 공부를 하라느니 하시는 건 좀... 아래 소스와 같이 고쳐도 안되던데요 전? ㅡ_ㅡ

세번째 소스와 같이 html_view_ok.php 를 iconv 로 강제 변환해도 안됩니다. 네번째 소스와 같이 고쳐도 안되구요.

글리님이 덧글에서 알려주신 다섯번째 소스와 같은 방법으로도 변환이 안됩니다. ㅡ_ㅡ; mb_convert_encoding 은 정말 순서가 뒤바뀐 것 같네요.

[html_view.php]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<meta name="viewport" content="width=device-width">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<HEAD>
<TITLE> HTML View 해독하기 </TITLE>
</HEAD>
 
<BODY>
<h3> HTML View 해독하기 </h3>
<FORM NAME="form1" METHOD="Post" ACTION="html_view_ok.php" ENCTYPE="multipart/form-data">
<TEXTAREA NAME="str1" COLS="44" ROWS="18" STYLE="width:99%"></TEXTAREA>
<INPUT TYPE="Submit" VALUE="전송">
</FORM>
</BODY>
</HTML>
cs

[html_view_ok.php]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<meta name="viewport" content="width=device-width">
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<HEAD>
<TITLE> HTML View 해독 결과 </TITLE>
</HEAD>
<BODY>
<h3> HTML View 해독 결과 </h3>
<?
function convert($str){
    $temp = mb_convert_encoding($str,"UTF-8","LATIN1");
    $temp = mb_convert_encoding($temp,"LATIN1","EUC-KR");
    return $temp;
}
function getmicrotime(){ 
    list($usec, $sec) = explode(" ",microtime()); 
    return ((float)$usec + (float)$sec); 
}
$string = stripslashes($_POST['str1']);
$time_start = getmicrotime();
?>
<TEXTAREA NAME="str1" COLS="44" ROWS="18" STYLE="width:99%"><?=convert($string)?></TEXTAREA>
<?
    $time = getmicrotime() - $time_start;
    print("<p>수행시간 ( $time 초)</p>");
?>
</BODY>
</HTML>
cs

[html_view_ok.php]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<meta name="viewport" content="width=device-width">
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<HEAD>
<TITLE> HTML Viewer 해독 결과 </TITLE>
</HEAD>
<BODY>
<h3> HTML Viewer 해독 결과 </h3>
<?
function convert($str){
    $temp = iconv("UTF-8","LATIN1//IGNORE",$str);
    $temp = iconv("LATIN1","EUC-KR//IGNORE",$temp);
    return $temp;
}
function getmicrotime(){ 
    list($usec, $sec) = explode(" ",microtime()); 
    return ((float)$usec + (float)$sec); 
}
$string = stripslashes($_POST['str1']);
$time_start = getmicrotime();
?>
<TEXTAREA NAME="str1" COLS="44" ROWS="18" STYLE="width:99%"><?=convert($string)?></TEXTAREA>
<?
    $time = getmicrotime() - $time_start;
    print("<p>수행시간 ( $time 초)</p>");
?>
</BODY>
</HTML>
cs

[html_view_ok.php]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<meta name="viewport" content="width=device-width">
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<HEAD>
<TITLE> HTML Viewer 해독 결과 </TITLE>
</HEAD>
<BODY>
<h3> HTML Viewer 해독 결과 </h3>
<?
function convert($str){
    $temp = iconv("UTF-8","EUC-KR//IGNORE",$str);
    $temp = iconv("UTF-8","EUC-KR//IGNORE",$temp);
    return $temp;
}
function getmicrotime(){ 
    list($usec, $sec) = explode(" ",microtime()); 
    return ((float)$usec + (float)$sec); 
}
$string = stripslashes($_POST['str1']);
$time_start = getmicrotime();
?>
<TEXTAREA NAME="str1" COLS="44" ROWS="18" STYLE="width:99%"><?=convert($string)?></TEXTAREA>
<?
    $time = getmicrotime() - $time_start;
    print("<p>수행시간 ( $time 초)</p>");
?>
</BODY>
</HTML>
cs

[html_view_ok.php]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<meta name="viewport" content="width=device-width">
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<HEAD>
<TITLE> HTML Viewer 해독 결과 </TITLE>
</HEAD>
<BODY>
<h3> HTML Viewer 해독 결과 </h3>
<?
function convert($str){
    $temp = mb_convert_encoding($str,"LATIN1","UTF-8");
    $temp = mb_convert_encoding($temp,"EUC-KR","LATIN1");
    return $temp;
}
function getmicrotime(){ 
    list($usec, $sec) = explode(" ",microtime()); 
    return ((float)$usec + (float)$sec); 
}
$string = stripslashes($_POST['str1']);
$time_start = getmicrotime();
?>
<TEXTAREA NAME="str1" COLS="44" ROWS="18" STYLE="width:99%"><?=convert($string)?></TEXTAREA>
<?
    $time = getmicrotime() - $time_start;
    print("<p>수행시간 ( $time 초)</p>");
?>
</BODY>
</HTML>
cs

덧글

  • 2015/05/26 18:17 # 삭제 답글

    아오 빡쳐.
  • ㄷㄷ 2015/05/26 18:19 # 삭제 답글

    그게 배우는 사람의 태도여?
  • agkdc 2015/05/26 18:43 # 답글

    이제 또 지가 물어봐놓고 쌍욕 시전 가나요?
  • Hide_D 2015/05/26 18:52 # 답글

    제가 돌려보지 않고 답을 드린거라 죄송하게 되었네요.
    다른 방법을 찾아보시죠. latin-1으로 깨지는건 보통 설정 미스지, 정상 작동은 아닐거거든요.

    + 다만, 웹 개발자가 유니코드조차 몰라서는 방정식 모르는 사람이 수학문제 푸는 격입니다!
    5번이 틀렸다고 1~4번을 깨끗이 무시하려고 하시는건 아니시겠죠? 공부합시다!
  • 글리 2015/05/26 18:57 #

    mb_convert_encoding($str,"UTF-8","LATIN1")는 LATIN1을 UTF-8로 변환하라는 의미이고 mb_convert_encoding($temp,"LATIN1","EUC-KR")는 EUC-KR를 LATIN1로 변환하라는 의미입니다.
  • Hide_D 2015/05/26 19:27 #

    /*아 윗줄 자체는 올바르게 수정했을때에도 저런식으로 적는게 맞습니다.

    원 데이터 자체가 latin-1 인코딩이 아니니까, 강제로 utf-8로 잡힌것을 latin-1으로 다시 고친 후,
    utf-8'인 척'하고 변환된 문자열을 읽는 작업을 수행해야되거든요.*/

    라고 적었다가 다시 보니 .. 갯수가 늘어났군요 -_-; 윗줄만 놓고보면 맞는것도 있고 틀린것도 있고.
  • 2015/05/26 19:31 # 삭제

    Hide_D님 이 쥔장 아주 형편 없어요.
    댓글 다는거 염탐하면서 실시간으로 소스 추가 수정해서 투척중입니다. 그리고 이렇게 해봤는데 왜 안되냐? 식입니다.

    이런 종류의 사람한테는 방법이 없어요.

    남의 지식 활용할 생각 말고 본인 스스로 printf(), echo() 로 일일이 죄다 찍어가며 확인하라고 하면 됩니다.
  • Hide_D 2015/05/26 19:34 #

    험 // 전부터 이 환자분 글 보고 있으니 걱정안하셔도 됩니다 ㅋㅋㅋㅋ.
    오히려 RSS 등록해놓고 꾸준히 보고있거든요 ㅋㅋㅋ

    이번 글도 너무 당당하게 나와서 혹시 잘못 설명한건가 했더니만 그것도 아니네요.
  • 조현병도풍년 2015/05/26 18:58 # 삭제 답글

    가르쳐달라고 부탁은 못할망정 욕하는 클라스보소.
    인성 쓰레기가 여기있네.
    사스가 ㅎㅁㅇㅂ
    이글루스에서 당신 ㅎㅁㅇㅂ이랑 같은 수준이라고 하면 욕인거 아시죠?
  • Hide_D 2015/05/26 19:24 # 답글

    보통은 답은 안알려드리는데, 잘못된 조언을 드렸으니 이번은 해결책도 드리지요.

    1. utf-8 -> latin1 변환(1회)
    2. 모든 문서의 인코딩은 utf-8(유니코드!)로 통일

    테스트 예제는 한글로 ë‚˜ì™€ì•¼í• ê²°ê³¼ë¬¼ì´ ì œëŒ€ë¡œ 안 나오는 이 상황은 무엇인가?
    로 했습니다.

    언어셋 상에서 보존이 안되는 정보를 제외하곤 복구됩니다....

    --------------------------------------------

    까지 적고보니, 지난번에 잘못 알려드렸다고 할만한 내용이 딱히 없는데요..?
    euc-kr기준으론 utf-8 -> latin 변경 후, 다시 euc-kr로 변경... 맞는데?

    저 소스코드를 그대로 쓰고 싶으시면, 값이랑 순서를 이리저리 잘 고쳐보세요. utf-8, latin1, euc-kr 세가지를 아무렇게나 조합하면 답이 하나는 나오겠네요.
  • 글리 2015/05/26 19:12 # 답글

    덧글적을때 없던 iconv 쓴 3번째짤,4번째짤 추가했으니 하는 말인데 mb_convert_encoding와 iconv의 파라메타 순서가 다릅니다. PHP 5.x 기준으로 iconv 항목 다루는 책이면 한번쯤 언급하는 이야기아닌가? 다른건 북을 치던 장구를 치던 관심없음.
  • 희망의빛™ 2015/05/26 19:37 #

    네 저도 구글에서 그런 내용을 보았습니다. 그래서 저런 식으로 순서를 다르게 배열한 거죠. 근데 mb_convert_encoding 이 (from) 과 (to) 순서가 다르다는 건 미처 눈치를 채지 못했네요. ㅡ_ㅡ;
  • 2015/05/26 19:25 # 삭제 답글

    조언 대로 charset 통일 부터...
    어디서 부터 꼬였는지 디버깅(?) 할 것 같으면 mb_detect_encoding() 로 다 찍어 보던가..
  • 희망의빛™ 2015/05/26 21:13 # 답글

    정상적으로 한글이 깨진 것이면 iconv 의 ignore 옵션을 쓰지 않아도 변환이 돼야 하는데 //ignore 옵션을 쓰지 않고 변환했을 때 내용이 완전히 잘리는 걸 보면 HTML Viewer 의 한글이 정상적으로 깨진 게 아니라는 결론을 내릴 수 있게 됩니다. 확실치는 않지만 이전 포스트에서 말씀드린 안드로이드 어플 자체에서 사용하는 2바이트 유니코드 때문이 아닌가 싶기도 합니다. 물론 덧글로 많은 분들이 2바이트 유니코드도 웹에서 사용할 수 있다고 말씀하고 계시긴 합니다만... ㅡ_ㅡ;
  • 오오 2015/05/27 01:04 # 답글

    텍스트 인코딩 꼬이기 시작하면 골치아파지므로 그냥 모든 것을 utf-8으로 통일하는 것이 제일 나을 것입니다.

    안드로이드쪽에서 무슨 앱으로 열려고 시도하시는지 모르겠으나 어쩌면 안드로이드 자체의 버그 또는 안드로이드에서 읽기 어려운 이상한 구조의 HTML을 시도하시거나, 또는 해당 앱의 구현에 문제가 있을지도 모릅니다.

    http://stackoverflow.com/questions/3961589/android-webview-and-loaddata

    대충 android webview encoding 이런걸로 검색했더니 위와 같은 경우가 나오는군요.

    그러므로 입력할 HTML부터 호환성이 떨어지는 euc-kr을 고집하기보다는 현재 가장 폭넓게 이용되는 utf-8으로 바꾸는 것이 훨씬 골치가 덜 아프고 장기적으로 봐도 나은 선택일 것으로 생각합니다만
  • 희망의빛™ 2015/05/27 06:28 #

    한글 페이지가 안드로이드 어플(HTML Viewer)의 소스 보기에서 깨지는 경우는 그 페이지 링크를 입력해 결과를 보는 원본 사이트 소스가 EUC-KR 로 돼 있는 경우인데 안드로이드 HTML Viewer 는 UTF-8 환경일 거라고 가정하고 최종적으로 EUC-KR 로 맞춰서 인코딩을 해독하기 위해 그렇게 한 것입니다. 물론 해독은 본문에서 처럼 웹서버 PHP 환경의 서버페이지 소스를 만들어 거기에다 깨져 나온 소스코드뷰를 입력해 해독을 시도하고 있습니다. 근데 이게 어떤 이유로 해독이 안된다는 것이죠. 가장 이해하기 쉬운 방법은 스마트폰에 HTML Viewer 를 설치해서 EUC-KR로 제작된 웹페이지 URL을 복사해 그 어플에 대입 실행 시켜 산출된 깨진 한글 코드 소스를 제 http://www.blrun.net/html_view.php 서버에 붙여넣기 해 시도를 해보는 방법입니다.

    본문의 소스코드를 보시면 알겠지만

    $temp = iconv("UTF-8","EUC-KR//IGNORE",$str);
    $temp = iconv("UTF-8","EUC-KR//IGNORE",$temp);

    이 명령어 같으면 첫번째 줄을 실행시키고 나면 $temp 에 원본 코드 깨진 모양 그대로 html_view_ok.php 에 전달돼 EUC-KR로 표시되기 때문에 UTF-8로 꼭 통일 안해도 된다는 것이며 만약 html_view_ok.php 도 UTF-8 로 통일하게 되면 원본 사이트 인코딩이 EUC-KR 인 상황에서 인코딩이 뒤죽박죽 될 우려가 있어서 그렇게 안했습니다. 그 다음 두번째 행처럼 그 깨진 인코딩을 html_view_ok.php 에서 다시한번 처리해 보여주면 되기 때문에 그렇게 시도를 해보았던 것입니다.
  • 무한 2015/05/27 01:11 # 답글

    수많은 분들이 희망의빛님께 공부하라고 하시는 이유가, 이 모든 문제의 거의 대부분이 희망의빛님이 공부를 안 해서 일어나는 일이라서 그럽니다.

    지금 게시판 수정... 인지 개악안지 모르겠는데, 아무튼 지금 하시는 것도 프로그래밍 실력 향상에 거의 도움이 안 되는 부분만 하고 계십니다. 이번 일도 그렇습니다. 구글에서 정보를 얻으신다고 하지만, mb_convert_encoding 조차도 못 찾았다는 사실은 희망의빛님의 정보 획득 능력에 심각한 문제가 있다는 말밖에 안 됩니다. 공부란게 단지 책 잡고 달달 외우는 게 아니라, 책을 보면서 이런 저런 방법이 있고, 앞으로 어떤 방향으로 나가야 하고, 이런 문제가 있을 땐 이렇게 찾아보면 되겠구나 등등을 깨우치는 과정입니다. 그게 안 되면 발전이 없습니다. 실무에서 얻는 경험과 지식도 이와 크게 다르지 않습니다. 좀 더 실전적인 방법을 체득할 수 있고, 책과 구글만이 아니라 베테랑 사수에게서도 배울 게 많다는 차이점이 있겠지요.

    공부하기 싫으시면 안 하셔도 되는데, 다만 어디에 올리고 발행하고 프로그래밍한다고 말씀만 안 하시면 됩니다.
  • Miyun_86 2015/05/27 09:14 # 삭제 답글

    전에 이야기를 했나 안 했나 모르겠는데... 주인장 태도 문제는 진짜 오만방자하네요.

    일반적인 경우라면 어떤 기술적인 조언을 했을 경우 안 될떄
    "(이러이러한 것 때문에) 제대로 작동이 되지 않습니다. 혹시 OOO님께서 알려주신 것이 이 구간에는 적용할 수 없습니까?"
    아니면
    "(이러이러한 것 때문에) 제대로 작동이 되지 않습니다. 찾는데까지 찾아보았으나 제대로 찾지를 못했는데 혹시 아시는 분께서는 조언 부탁드립니다."

    이런 식이 맞는거 같은데 이 주인장은 항상 "니들이 알려준거 안되잖아! 되지도 않는거 알려주면서 왜 뭐라고 해?" 수준이니, 원...

    무식하면 책을 보고, 조언을 구할꺼면 자기 자신을 낮추는 태도를 보시이길.

    - 아, 물론 제 글에 뭐라고 반박할지도 기대하고 있겠습니다. 불리한건 매번 도망가는 본인의 지금까지의 행적 상 기대하면 안 되기는 하는데, 사람 미련이 말이죠... 으흐흐.
  • ... 2015/05/27 09:36 # 삭제 답글

    예전엔 이 주인장 사고패턴이 이해가 안됐었는데, 최근 다음 모 카페 회원들을 보고 생각이 바뀌었습니다.
    이 주인장과 같은 사고패턴을 가진 사람이 꽤 많더군요. 물론 이해하게 되었다는 것 뿐, 상대하고 싶지 않다는 점은 변함없습니다.
댓글 입력 영역
* 비로그인 덧글의 IP 전체보기를 설정한 이글루입니다.


웹로그 검색