인코딩 부분에서 utf-8은 7번6번 비트가 1인게 여러번 오는거라 체크하기가 쉽고, 아래와 같은 경우에는 현재 인코딩을 CP867로 꼭 변환할 필요는 없고, 그냥 맵핑되는 테이블을 이용하시면 되리라 봅니다. 크게 벗어나는 예외는 없을 것 같네요.
아니면 다른 zip모듈을 이용하시는게 좋으리라 봅니다.
1. 유니코드
2. CP_ACP(CP949) 현재 인코딩
3. CP-UTF8
4. 삽질 인코딩.
대충 이중에 하나가 된다고 추정하시면 될 것 같습니다.
CP867이 틀리면 CP 437(IBM, Dos)로 해보시는 것도. 둘이 차이가 있다면 아마도 이게 더 맞는 것 같네요.
http://en.wikipedia.org/wiki/Code_page_437
memi 님이 쓰신 글 :
: 도와주신 모든 분들 정말 감사드립니다.
: 덕분에 문자체계에 대해 많이 공부했습니다. 위키, msdn, 등
: 아무 생각없이 쉽게 선언해서 쓰던 스트링이 알아야 할게 많았네요~~!
: 근데 한가지 질문이 더있습니다. (이건 답 안해주셔도되요;;)
: http get해서 압축파일을 받고 바로 푸는 모듈을 만들고 있는데 cp949임을 알고 대처하는 거야 해보겠는데(정해져 있으니)
: 출처가 불분명할때 어떤 인코딩인지 확인은 어떻게들 하시나요? 유닉스에서 압축했을지, 러시아윈도우에서 압축했을지.. 등등?
:
:
:
: memi 님이 쓰신 글 :
: : XE2부터 내장된 zip library를 잘 사용했었는데요
: : 한글이 문제네요
: : 아래와 같이 testz 폴더에 새 텍스트 문서.txt 하나 넣고 testz.zip으로 압축한걸 풀면 파일 안의 내용은 멀쩡한데 폴더,파일명 한글 부분이 깨집니다.
: :
: :
: : #include
: : TZipFile *z = new TZipFile;
: : #if 1
: : z->ExtractZipFile("c:\\testz.zip", "c:\\");
: : #else
: : z->Open("c:\\testz.zip",zmRead);
: : String whx;
: : for(int i = 0; i < z->FileCount; i++) {
: : Memo1->Lines->Add(z->FileName[i]); //깨져있는 파일명...
: :
: : wchar_t *wc = z->FileName[i].w_str();
: : whx="";
: : for(int j = 0; j < z->FileName[i].Length(); j++)
: : whx+= IntToHex(wc[j],4) + " ";
: : Memo1->Lines->Add(whx); //깨진 데이터는 어떤 인코딩이길래?
: : }
: : z->Close();
: : #endif
: : delete z;
: :
: :
: : 원하는 값 : testz\새 텍스트 문서.txt
: : 깨져있는 값(깨져서 헥스로) : 0074 0065 0073 0074 007A 002F 2557 2321 0020 253C 256A 255C 2551 255E 00AB 0020 2563 00AB 255D 00A1 002E 0074 0078 0074
: :
: : 새 : 2557 2321 (무슨 네바이트나..)
: : 텍 : 253C 256A
: :
: : 혹시 TZip class 사용해보신 분들 계신가요? 버그인지 혹시 다른 사용법이 있을까요?