질답에 올리기는 좀 뭣한 질문이라서...

mycluster의 이미지

질답에 올려서 물어보기에는 영 여기에 물어보는거니, 그냥 아시는분 해결책 좀 주시면 감사하겠습니다.

iso8859-1 로 인코딩된 ASP + MS Access 웹 프로그램에 한글 메시지를 넣게 됬는데, 일본어, 중국어도 넣을려고 해서 utf-8로 일단 소스를 찾아서 대략 고쳤더니, 한글 메시지는 잘 보이는군요.
그런데, 다 좋은데 DB에 데이터를 넣으면 한글이 전부 깨져서 들어가는데, 이거 어디를 손봐야 가장 손쉽게 고칠 수 있을까요?

지금까지 했던 작업들은

1. ASP 소스에 meta http-equiv="Content-Type" content="text/html; charset=utf-8" 삽입
2. 소스 내의 메시지가 제대로 보이게 하기 위해 모든 소스 파일을 에디터에서 utf-8로 저장

이 두개는 했는데, 대략 검색해본결과 DB에 insert 하는 소스부분에 처리를 해줘서 한글로 입력받은 내용을 utf-8로 DB에 넣으면 될 것 같은데, 해본적이 없어서 삽질 중이네요.

euc-kr로 하면 대략 DB에도 제대로 들어가는 것 같은데, euc-kr로 했다가는 나중에 일본어 버전, 중국어 버전도 덤테기를 쓸거 같네요.

어디를 보면 좋을까요?

dalgarak의 이미지

ASP 서버 스크립트에 Codepage를 지정하셨는지요.

<% @LANGUAGE='VBSCRIPT' CODEPAGE='65001' %> 
<% Session.CodePage = 65001 
	Response.CharSet = "UTF-8"
%> 

위의 코드를 사용했었네요. 어차피 ADO를 통해서 들어가는 DB 데이터는 UTF-16인걸로 기억해서..;
알아서 ASP 엔진쪽에서 codepage를 기준으로 컨버팅 해주던걸로 기억합니다.

음 코드로는 % 가 ?php로 바뀌네요, ?php - ? 대신 %로 감싸주시면 될 껍니다.

------
http://lunapapa.egloos.com

mycluster의 이미지

어제 내가 단 댓글은 어디로 갔는지...

말씀하신 코드페이지는 다 박아줬습니다. (역시 구글과 네이버 덕분에 찾았죠)
그런데, ADO를 통해서 들어가는 DB데이터가 기본으로 UTF-16인가요?

검색을 해보면 MS-SQL을 사용할때는 insert 할때 변수명 앞에 N'(%변수%)' 이런식으로 N'을
다 박아주면 utf-8로 박힌다고 하는데, Access MDO 파일에는 안 먹히는 것 같더군요.

그리고, 이런식으로 insert 문마다 박아주는게 임시변통인듯 해서요...

제가 짧은 지식으로 급조해서 검색한 결과 UTF-8로 웹을 만들기 위해서는

1. ASP에 Codepage 및 charset을 utf-8로 세팅한다.
2. ASP 소스파일을 에디터에서 utf-8로 저장한다.3
3. DB 자체의 저장 encoding을 utf-8로 한다.

이런 과정인 듯 한데, 현재는 3번이 뭔가 문제가 있는 듯 합니다...

--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러

--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러

linlin의 이미지

혹 DB는 euc-kr로 세팅되어 있는 것 아닌지요?

mycluster의 이미지

저도 이게 굉장히 의심스러운데, MS Access를 오픈해서 봐도 encoding 세팅을 바꾸는데를
찾을 수가 없네요...

--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러

--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러

linlin의 이미지

그렇다면 한번 윈도우 전체 encoding을 utf-8으로 바꾸어 보심이? 아마도 Access 역시 깔린 OS 로케일을 따라가지 않겠습니까. 아마도 한글 윈도우면 euc-kr이 디폴트 인코딩이 아닐까 싶습니다만. (이게 cp949(?) 였던가요?) 제가 윈도우는 잘 모르긴합니다만 비스타가 아니면 디폴트 인코딩이 euc-kr이라고 알고 있습니다.

linlin의 이미지

잠깐 찾아보니 이런 것도 있네요... control panel에서는 utf-8 옵션이 없고 윈도우에서 internally는 utf-16 이라는데 이게 무쉰 소리인지.

http://forums.oracle.com/forums/thread.jspa?threadID=687157&tstart=0&messageID=2672021

lifthrasiir의 이미지

"Internal encoding"이라고 하는 건 wchar_t 타입(W로 끝나는 API 함수들이 이거의 포인터를 받죠)이 UTF-16이라는 의미입니다. 그 이상 그 이하도 아닙니다.

UTF-8은 제가 기억하기로는 시스템 전체 인코딩으로 선택할 수 없습니다. 65001이었나 하는 코드 페이지 번호는 있지만, 그건 MultiByteToWideChar 같은 변환 함수에서나 쓸 수 있지 인코딩으로는 선택 못 하는 걸로 압니다. (사실 한글 조합형도 1361로 등록되어 있습니다.) 게다가 윈도는 로캘에 맞춰서 운영체제 버전을 따로 만드는 경향도 있지요. -_-;

망치의 이미지

http://javaservice.net/~java/bbs/read.cgi?m=qna&b=QandA&c=r_p&n=965364612&p=153&s=t

요게 도움이 될지 모르겠네요.. 자바쪽에선 저렇게 쓰나봅니다. 근데 액세스2000 기준이라.. 지금은 좀 더 깔끔한 방법이 있지 않을까 싶은데요..
움,.

---------------------------------------
http://www.waitfor.com/
http://www.textmud.com/