C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[72096] Re:Re: 이 코드로 테스트 해보세요
빌더(TWx) [builder] 3911 읽음    2014-12-08 21:08
빌더(TWx) 님이 쓰신 글 :
: 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 사용해보신 분들 계신가요? 버그인지 혹시 다른 사용법이 있을까요?
:
:
:
: 답변:
:
:
: 엠바에서 구현해 놓은 TZipFile은 파일네임을 처리할 때... 다양한 encoding 방식을 지원하도록 구현 되어있지 않습니다.
:
: RTL에서 디폴트로 정의되어있는 코드페이지가 사용될 수도 있고, UTF8로 encoding 할 때 무조건 코드페이지 65001로 단정하기도
: 해서, 이건 사용하는 RadStudio 버전에 따라서 다르기도 합니다. Zip 파일이 확장된 파일네임 encoding 방식으로 압축될 경우...
: Flag 필드 이외에 Extra 필드가 Zip 파일 내부에 셋팅 되기도 하는데... 엠바가 구현해 놓은 TZipFile은 그런 부분을 고려하는 코드가
: 전혀 구현되어 있지 않습니다.
:
: 동일한 버전의 TZipFile을 이용하지 않은... 다른 도구를 이용해서 Zip 파일이 만들어 졌을 경우...  파일네임이 엉뚱한 문자셋으로
: 보여 질 수 밖에요...
:
: UTF-8 encoding 방식은 1 바이트 ~ 4 바이트 크기의 가변길이로 encoding 됩니다. 사용되는 문자셋 코드페이지에 따라 다르죠.
: 지금 이 PC가 Windows 10인데 Korean Language Pack이 지원되지 않아서, Korean Language 로 셋팅 되어있을 때 탐색기가
: 어떤 코드페이지로 파일네임을 encoding 해서 Zip 파일을 만드는지 확인해 볼수 없네요. Zip 파일을 직접 살펴보지 않고서는...
:
:



ps>

현재 개발환경 PC가 WinRT 프로젝트 진행중인 게 있어서 Windows 10 으로 세팅 되어 있어서 확인해 볼 수가 없네요.
윈도우즈 탐색기를 이용해서 자체 Zip 기능으로 압축 한 파일을 아래 코드로 확인 해보세요.

//---------------------------------------------------------------------------
#include < vcl.h>
#include < system.zip.hpp>
#include < memory>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    std::auto_ptr < TZipFile> z (new TZipFile);

    z->Open(L"c:/testz.zip", zmRead);

    for(int i = 0; i < z->FileCount; ++i)
    {
        std::auto_ptr < TEncoding> e (new TMBCSEncoding(0x3B5, 0, 0));
        Memo1->Lines->Add(e->GetString(z->FileInfo[i].FileName));
    }
}
//---------------------------------------------------------------------------



+ -

관련 글 리스트
72080 TZip 사용 한글문제 memi 3755 2014/12/04
72106     Re:TZip 사용 한글문제 memi 3430 2014/12/09
72107         Re:Re:TZip 사용 한글문제 김도완 3677 2014/12/09
72096         Re:Re: 이 코드로 테스트 해보세요 빌더(TWx) 3911 2014/12/08
72089     Re:TZip 사용 한글문제 3465 2014/12/06
72092         Re:Re:TZip 사용 한글문제 memi 3678 2014/12/08
72105             Re:Re:Re:TZip 사용 한글문제 김도완 3633 2014/12/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.