브라우저 별(IE, Chrom) URL Encode/Decode 질문입니다.
글쓴이: park3250 / 작성시간: 화, 2015/12/22 - 2:26오후
안녕하세요
웹으로부터 UTF-8 -> URL 인코딩 된 데이터를 받아서
URL 디코딩 -> ANSI로 변환하여 다시 웹으로 전달 할 경우
IE에서는 캐릭터(라이온킹 1화.mp4)가 정상적으로 보여지는데
크롬에서는 캐릭터(라이온킹 1ȭ.mp4)가 깨져서 보입니다.
캐릭터가 깨지는 경우가 "0x20 + 숫자 or 특수문자 + 한글" 일 경우에만 깨집니다.
URL 인코딩/디코딩은 curl 라이브러리로 구현하였습니다.
해결방법을 알고 계신분 답변 부탁드립니다...
감사합니다.
Forums:
ANSI 로 변환한다는 게 어떤 의미인가요
ANSI 로 변환한다는 게 어떤 의미인가요 ?
"화"의 euckr(및 ms-cp949)코드는 0xc8 0xad 이고,
"ȭ"의 utf-8 코드도 0xc8 0xad 입니다.
음..
리눅스에서 iconv 라이브러리로 UTF-8을 EUC-KR로 변환해서 웹으로 전달하는데요..
코드가 같다면...어떻게 처리 해야 하나요?
제가 잘 몰라서...
변환 하지 않으셔도...
헤더에 EUC-KR 로 지정해주시면. 브라우저에서 변환 됩니다.
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
$ locale <=== 현재 로케일은
$ locale <=== 현재 로케일은 UTF-8입니다.
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=ko_KR.UTF-8
LC_TIME=ko_KR.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=ko_KR.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=ko_KR.UTF-8
LC_NAME=ko_KR.UTF-8
LC_ADDRESS=ko_KR.UTF-8
LC_TELEPHONE=ko_KR.UTF-8
LC_MEASUREMENT=ko_KR.UTF-8
LC_IDENTIFICATION=ko_KR.UTF-8
LC_ALL=
1) UTF-8 데이터 만들기(보기 좋게 하기 위해 '화' + 줄바꿈(LF)를 넣어서 만들었습니다.)
$ cat > utf-8.txt <== utf-8 테스트 데이터 파일을 만듭니다. '화'한글자와 LF(Line Feed : 아스키코드번호 10, 16진법으로 0x0a)
화
$ ls -al utf-8.txt
-rw-rw-r-- 1 XXXX XXXX 4 12월 23 09:56 utf-8.txt
** 4바이트인 이유는 UTF-8 코드가 가변길이 코드이기 때문입니다.
UTF-8은 1~6바이트의 가변길이를 가지는 코드체계입니다. 영문권이 1바이트이고, 한국어는 3바이트 영역에 있습니다.
즉, 한글 1자가 3바이트를 차지하게 된다는 얘기입니다.
따라서, ('화' = 3바이트) + (LF = 1바이트) = 4바이트인 것입니다.
2) EUC-KR 데이터 만들기
<== 문자 인코딩을 변환해 주는 도구인 iconv를 사용해서 이미 만들어진 utf-8 데이터를 euckr로 변환해서 사용하도록 하겠습니다.
$ iconv -f utf-8 -t euckr utf-8.txt > euckr.txt
$ ls -al euckr.txt
-rw-rw-r-- 1 XXXX XXXX 3 12월 23 09:59 euckr.txt
** 3 바이트인 이유는 euckr은 2바이트 고정 길이 '한글'코드입니다. utf-8이 전세계어를 포함하고자 한다면, euckr은 한국어 및 약간의 한자등을 포함합니다.
즉, 한글 1자가 2바이트를 차지하게 된다는 얘기입니다.
따라서, ('화' = 2바이트) + (LF = 1바이트) = 3바이트인 것입니다.
$ ls -al
total 16
drwxrwxr-x 2 XXXX XXXX 4096 12월 23 10:00 .
drwxr-xr-x 29 XXXX XXXX 4096 12월 23 10:00 ..
-rw-rw-r-- 1 XXXX XXXX 3 12월 23 09:59 euckr.txt <== 3바이트( '화' + LF) : EUC-KR
-rw-rw-r-- 1 XXXX XXXX 4 12월 23 09:56 utf8.txt <== 3바이트( '화' + LF) : UTF-8
3) 실제 코드값을 디스플레이 해봅니다.
$ cat utf8.txt
화
$ cat euckr.txt
ȭ
$ cat utf8.txt | hexdump -v -C
00000000 ed 99 94 0a |....| <=== 바이트 단위로 코드값을 봅니다. UTF-8
00000004
$ cat euckr.txt | hexdump -v -C
00000000 c8 ad 0a |...| <=== 바이트 단위로 코드값을 봅니다. EUCKR
00000003
* '화'에 대한 코드(16진법으로 표기시)
(1) UTF-8 : ed 99 94
(2) EUC-KR : c8 ad
---------
* 코드는 다른게 정상이고요, 제 생각으로는 다른 문제(변환이 잘못되었다? 질문자님의 버그? 또는 다른 실수? 등등)인듯 보입니다.
** 참고로, 오래 전에 iconv가(JAVA의 문자열 처리에서도 exception 이... ) 전각문자 입력시 오동작했었던 것으로 기억하고 있는데, 현재는 어떤지 확인해보지 않았습니다. 이와 같은 경우는 아니겠지만요. 전각? 반각? 물음표이면 검색해 보세요.
우선 답변 정말 감사드립니다!
답변 정말 감사드립니다
제가 위에서 리눅스에서 변환해서 보낸다고 했는데 현제 윈도우 NT에서 보냅니다
정리해보면 NT에서 EUC-KR로 웹으로 보내게 되는데
IE에서는 브라우저에서 '화'를 EUC-KR로 보여줘서 제대로 보이는거고
크롬에서는 '화'를 UTF-8로 보여줘서 깨지는건가요?
제가 웹쪽은 잘 몰라서요..
결론은 웹에서 처리를 해주면 되는건가요?
아니면 제가 UTF-8로 변환된 형태로 보내주면 되는건가요?
그리고 파일명이 "라이온킹 1화.mp4" 이면 앞에 라이온킹 글자는 제대로 보이는데
화면 그런건 왜그런걸까요....?
정말 초보라 죄송합니다;;
base64 를 함께 사용해보세요.
http://www.devpia.com/Maeul/Contents/Detail.aspx?BoardID=50&MAEULNO=20&no=962236&ref=962236&page=2
URI.와 URL 로 문자전달에 문제가 있을경우.
base64()와 url_encode()를 함께 사용하기도 합니다.
base64()와 url_encode() Javascript
http://www.google.co.kr/search?hl=ko&source=hp&biw=&bih=&q=base64%28%29%EC%99%80+url_encode%28%29+Javascript&gbv=2&oq=base64%28%29%EC%99%80+url_encode%28%29+Javascript&gs_l=heirloom-hp.12...244.244.0.887.1.1.0.0.0.0.144.144.0j1.1.0....0...1ac..34.heirloom-hp..1.0.0.2u3WF3Li-rw
https://search.naver.com/search.naver?ie=utf8&sm=stp_hty&where=se&query=base64%28%29%EC%99%80+url_encode%28%29+Javascript
base64()와 url_encode()
http://www.google.co.kr/search?q=base64%28%29%EC%99%80+url_encode%28%29&hl=ko&biw=&bih=&gbv=2&oq=base64%28%29%EC%99%80+url_encode%28%29&gs_l=heirloom-serp.12..30i10.897498.897498.0.898043.1.1.0.0.0.0.284.284.2-1.1.0....0...1ac.1.34.heirloom-serp..0.1.283.RBvpRbzhRl8
https://search.naver.com/search.naver?ie=utf8&sm=stp_hty&where=se&query=base64%28%29%EC%99%80+url_encode%28%29
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
댓글 달기