안녕하세요. 한글 사이트를 해외 서버에 올려 보신 경험자분 계신가요? 지금 제 사이트는 EUC-KR 한글 인코딩 문서타입을 가지고 있고 메타정보로 euc-kr 설정이 되어 있습니다. Database(MS-SQL2000) 또한 Collation=Korean_Wansung_CI_AS 로 한글 완성형으로 설정되어 있습니다. 이 사이트를 해외 웹호스팅 서버에 올렸는데 Database에서 불러온 한글 문자만 모두 ????? 로 표시되면서 깨지네요.. 이 문제가 어느 단계에서 발생하는 문제인지 확인을 해보고자 몇가지 분석을 나름 해봤습니다. 1. DB 단에서의 분석 웹 호스팅 서비스를 제공하는 해외 서버의 기본 OS는 영문 windows 2003 Server입니다. 제공하는 Database는 MS-SQL 2005이며 역시 영문 버전입니다. 웹사이트의 DB는 SQL 2000 기반이지만 2005로 옮겨도 문제가 없다고 테스트 후 결정했고 저는 제가 지금 돌리고 있는 한국쪽 2000 서버에서 bak 백업 파일을 받아서 해외 서버쪽에 그대로 restore 시켰고 지금 제 PC에 설치된 sql 2005 express(한글판) management studio를 통해 해당 DB를 접속하고 데이터를 불러와 보니 정상적으로 불러오고 한글도 잘 나옵니다. DB의 collation 설정과 각 테이블마다 가지고있는 컬럼의 varchar 타입에 대한 collation은 모두 Korean_Wansung_CI_AS 입니다. 단 컬럼의 데이터 타입이 varchar 인데 nvarchar 타입으로 하지 않은 것은 utf-8로 다국어 지원을 할 것이 아니므로 상관 없다고 판단 했습니다.
2. ASP 페이지의 페이지 속성 지정
보통은 <%@ language="VBScript" codepage="65001" > 이렇게 설정을 하는데
지금 제가 가지고 있는 웹사이트는 이 속성 지정 코드가 없네요... config.asp 파일이 공통으로 사용되는 include 파일이라
넣어 줄려고 했는데 이 코드는 asp 페이지 최상단에 위치해야 해서 모든 페이지에 적용시켜야 하는 관계로 일단 생략 했어요.
3. Session.CodePage 와 Response.CharSet 설정
CodePage = 65001, CharSet은 euc-kr 로 지정 했습니다.
4. 메타태그에 대한 CharSet 설정
<meta http-equiv.... charset=euc-kr"> 이렇게 설정 되어 있습니다.
5. 웹페이지 및 기타 페이지 (asp, html, css, js ..) 문서 인코딩 값
모든 문서의 인코딩 값은 한국어로 설정 되어 있습니다.
현재와 같은 상황에서 다른 부분들은 문제가 안되는데 왜 DB에서 불러온 한글 문자만 ???? 이런식으로
깨져서 나오는 걸까요? (다른 숫자나 영문은 잘 불러옵니다..)
이것 땜에 벌써 하루를 다 보냈네요.. 조언 부탁드리겟습니다.
Comment 12
-
History
2013.07.27 19:45
-
Larry
2013.07.29 08:55
답변 감사합니다.
언어팩은 글쎄요.. 아마 설치 안되어 있을 것 같습니다.. 그리고 설치 요청하면 해줄지는 알아봐야겠네요..
언어팩쪽 문제라면 호스팅업체와 어떻게든 조절을 해보면 될 듯 한데요..
아무래도 다른 문제가 있지 않을까 해서요...
여기저기 질문을 올려봤는데 딱히 답변이 나오진 않는 것 같습니다... 갑자기 난관에 부딪혔네요 ㅎㅎ
-
road맨
2013.07.29 15:23
안녕하세요
CodePage = 65001은 utf-8의 속서을 나타냅니다
CodePage = 949로 지정해 보세요
-
Larry
2013.07.29 17:13
아.. 로드맨님 죄송합니다.
위 내용에서 65001 잘못 입력 되었네요... 949로 했었습니다. ㅎㅎ
문제는 해결이 안되네요...
참고로 이 문제와 관련해 호스팅 서버측에 문의를 해 놨는데 좀 이상한 답변이 나왔습니다.
요약하면...
자기네들 database admin팀에게 collation 값으로 Korean_Wansung_CI_AS 를 추가해 달라고 전달한 상태이니 기다려 달라고..
그래서 내가 SSMS로 당신네쪽 서버에 접속해 우리 DB의 status 값을 확인했을 때 이미 Korean_Wansung_CI_AS 이었는데
무슨 얘긴지 모르겠다고 회신 하긴 했는데 아직 답변이 안오네요..
혹시나 해서 제 추측인데...
만약 제가 한국에서 백업한 DB가 그 쪽 해외 서버에 복원 했을 때
해당 서버에는 collation 값으로 Korean_Wansung_CI_AS 가 없어도 db status 값을 조회해 보면 그냥 그렇게 나오기만 하고
실제 서버에는 collation 값이 없어서 그런 걸까요?
-
쓸만한게없네(윤선식)
2013.07.30 00:09
-
Larry
2013.07.30 08:56
선식님 도움 감사드립니다.
그런데 해당 글은 제가 검색하다가 지난 금요일에 본 내용이네요...
지금 utf-8로 변환을 하게 되면 단순히 CharSet이나 PageCode 변경만으로 해결 되지 않더라구요..
DB 같은 경우도 지금 korean_wansung으로 들어가 있는 한글 데이터들이 깨지는 것 같더라구요...
데이터 타입도 전부 찾아내서 n타입으로 바꿔줘야 하고...
그래서 한글 들어있는 모든 컬럼들의 데이터를 빼서 변환작업을 거친 후 다시 utf-8 방식으로 넣어 주어야 할 것 같아요..
그 뿐 아니라 웹페이지 문서 인코딩 타입도 기존 한국어에서 utf-8로 변경하면 문서 내에 있는 한글이 모두 깨집니다.(주석 포함)
그래서 깨진 모든 한글 문자를 수정해 줘야 하더라구요.. (문서 갯수 체크해봤더니 1600개가 넘어요)..
그래서 utf-8로 변환은 현재 포기 상태이네요...
-
쓸만한게없네(윤선식)
2013.07.30 15:55
만약... 정말 변환을 하셔야 한다면, 단순히 일일이 하시는 것은 좀 어렵지 않을까요?
테이블 리스트랑 칼럼 리스트를 XML같은 것으로 뽑아 낸 뒤. (아니면 CSV 라도)
그 리스트만큼 LOOP 돌면서 UPDATE하도록 하면 한 방에 끝낼 수 있긴 합니다만...
물론 백업은 필수겠죠...
-
Larry
2013.07.30 16:46
지금 호스팅 회사에 문의하는 중인데요...
호스팅 회사에서도 딱히 정답을 알고 잇는 것 같지가 않네요...
ASP Codepage 값을 949, 51949 등으로 지정하라는 답변이 왔는데.. 이건 이미 해봤거든요...
아무래도 영문서버에 영문 SQL이다보니 서버쪽 설정과 관련한 내용이 문제 되는 것 같은데 그들도 잘 모르겠나봐요..
SQL에서는 한글이 잘 보이는거 보면 웹서버 설정과 관련된 문제가 아닐까 하는 생각도 드는데...
벌써 몇일째 이러고 있으니 힘드네요..
정말 최악의 경우라면 선식님 말씀대로 일괄변환하는 방법을 찾아야 할텐데... 걱정입니다.. ㅜㅜ
-
건우아빠
2013.07.30 22:15
ansi <-> utf8 변환 프로그램 사용하시면 일괄 변환도 가능 합니다..
-
Larry
2013.07.30 19:00
문제 해결 되었습니다. ㅎㅎ 그런데 아직 의문이 남네요.. 다른 해결책은 없는지도 궁금하구요..
일단 결론부터 말씀드리면 다음 두 가지 입니다.
1. Database 테이블의 varchar / char / text -> nvarchar / nchar / ntext 타입 변경
2. asp 페이지마다 <%@ Codepage=949 language="VBScript" %> 첫줄에 적용
위와 같이 해주고 나니 euc-kr 타입으로 한글이 정상 출력 되네요...
둘 중 어느 것 하나도 빠지면 안되구요...
컬럼 데이터 타입 변경은 건우아빠님께서 답변 달아주신 글이 있어서 그걸 참고하면 어찌어찌 될 것 같은데...
문제는 asp 페이지마다 codepage 값을 넣어주는 것이네요..ㅜㅜ
이놈의 코드값은 include 시키는 common 파일에 넣어도 안되고 무조건 해당 페이지 첫 줄에 넣어 주어야 하더군요..ㅜㅜ
대충 asp 페이지만 약 1000개 이상... ㅜㅜ
언제 이걸 하나요 ㅜㅜ
좋은 방법 아시면 조언좀 부탁드릴께요...
-
건우아빠
2013.07.30 20:49
http://me.ne.kr/60152896213 php의 iconv ,jsp 등의 인코딩 함수이용.. 이것도 스크립트를 다 수정 해야 할듯...
<%@ Codepage=949 language="VBScript" %> 내용이 무조건 페이지의 첫번째에 온다면......
도스 명령으로
comm.asp
<%@ Codepage=949 language="VBScript" %>
copy comm.asp + 기존.asp 기존변환.asp
copy 기존변환.asp 기존.asp /y
하시면 조금 손쉽게 변환은 가능 할듯.... 대신 무조건 첫번째 문장에 동일하기 들어간다는 전제 일때는 .....
asp 목록은 도스창에서
dir *.asp /s > asp.list 하시면 현재 위치에서 서브 디렉토리까지 asp 확장자 화일의 리스트를 asp.list 화일로 만들어 줍니다.
이걸 엑셀에서 불러 오기로 하셔서 화일 목록 만 추출하시고
목록의 가지고 엑셀에서 병합 명령을 자동으로 만드시고 병합명령을 카피 하신다음 도시창에서 붙여 넣기 하시면 일괄 처리가 됩니다.
좀 복잡하나요....
-
Larry
2013.07.30 21:58
와우.... 대박이네요... 이런 방법이 ㅎㅎㅎㅎ
매우 큰 도움이 될 듯 합니다~ 저도 도스는 고교시절과 대학시절 많이 써서 batch 파일까지 했었지만...
이런 방법은 미쳐 생각도 못해봣네요. ㅎㅎ GUI에 익숙해져버린 탓이겠죠?
정말 감사합니다~
혹시 윈도우쪽에 한글 언어팩이 깔렸나여?
한글언어팩을 깔아보시는것도 방법일듯 합니다..
전문가적 입장에서 답변은 다음분이...