Microsoft MVP성태의 닷넷 이야기
c# 압축파일 읽어 올 때 BinaryRead 한글 처리 문제 [링크 복사], [링크+제목 복사],
조회: 12383
글쓴 사람
김영식 (nukkims85 at gmail.com)
홈페이지
첨부 파일
 

using (var fileStream = File.OpenRead( filePath ) )
using (var bodyStream = new ZlibStream( fileStream, CompressionMode.Decompress))
using (var bodyReader = new BinaryReader(bodyStream))
{
   fileStream.Seek(header.FileTablePosition + 8, SeekOrigin.Begin);
   for (int i = 0; i < header.FileCount; i++)
   {
      var fileName = string.Empty;
      char currentChar;
      while ((currentChar = (char)bodyReader.ReadByte()) != 0)
      {
         fileName += currentChar;
      }
   }
   .
   .
   .
}

위의 코드는 윈도우에서 압축파일을 BinaryReader의 ReadByte()를 이용해 byte단위로 읽어 와서 char형으로 변환하고
그걸 합해서 file이름으로 가져오는 부분인데요. 이걸 실행하면 파일이름이 한글로 되어 있으면 깨져 나옵니다. currentChar를 누적하니까
당연한거 같기도 합니다.

일단 BinaryReader(bodyStream)의 인코딩 옵션을 줘봤는데 안되더군요. 뭐 당연한거 같습니다만.

그리고 최종 fileName값의 인코딩 변환

Encoding utf8 = Encoding.UTF8;
byte[] utf8Bytes = utf8.GetBytes(fileName);
Han_FileName = utf8.GetString(utf8Bytes);

이렇게 수정해 디버그 상태에서 값을 봤는데 안되내요.

저 부분을 어떻게 수정하면 한글 파일이름을 인식하게 할 수 있을까요?













[최초 등록일: ]
[최종 수정일: 12/26/2022]


비밀번호

댓글 작성자
 



2022-12-27 01시27분
그런 경우 Decoder를 쓰는 것이 좋지 않을까요?

한글이 포함된 바이트 배열을 나눈 경우 한글이 깨지지 않도록 다시 조합하는 방법
; https://www.sysnet.pe.kr/2/0/11378

아니면, byte로 읽어 char로 즉시 변환하지 말고 모두 읽은 다음에 Decoding을 해야 합니다.
정성태

... 91  92  [93]  94  95  96  97 
NoWriterDateCnt.TitleFile(s)
133김용국4/1/200510815                답변글 [답변]: [답변]: [답변]: [답변]: SmartClient 배포와 관련해서 무엇이 빠졌는지 좀 알려주시면 감사하겠습니다....!
126구정모3/31/200512141이홈의 효과는 어떻게???
128정성태3/31/200511274    답변글 [답변]: 이홈의 효과는 어떻게???
124배재현3/30/200511069Smart Client 문제로 이렇게 질문을 하나 올리게 됐습니다.^^;;
125정성태3/30/200510773    답변글 [답변]: Smart Client 문제로 이렇게 질문을 하나 올리게 됐습니다.^^;;
121안연준3/23/200510480이벤트 관련 문제
122정성태3/23/200510371    답변글 [답변]: 이벤트 관련 문제
120안연준3/23/200510314정성태님.... 오프라인 문제 질문 입니다. [1]
123정성태3/23/200510529    답변글 [답변]: 정성태님.... 오프라인 문제 질문 입니다. [1]
117정준명3/21/200511419COM+ 메소드 작성시...
118정성태3/29/200510987    답변글 [답변]: COM+ 메소드 작성시... [1]
109김용국3/18/200511988IE에 Docking된 WinFormControl내의 특정 메소드에 값을 보내기 .. 잘 되기는 하는데 한가지 문제가 ...
112정성태3/19/200511133    답변글 [답변]: IE에 Docking된 WinFormControl내의 특정 메소드에 값을 보내기 .. 잘 되기는 하는데 한가지 문제가 ...
113김용국3/19/200511087        답변글 [답변]: [답변]: IE에 Docking된 WinFormControl내의 특정 메소드에 값을 보내기 .. 잘 되기는 하는데 한가지 문제가 ...
114정성태3/19/200511096            답변글 [답변]: [답변]: [답변]: IE에 Docking된 WinFormControl내의 특정 메소드에 값을 보내기 .. 잘 되기는 하는데 한가지 문제가 ...
115김용국3/21/200510545                답변글 [답변]: [답변]: [답변]: [답변]: IE에 Docking된 WinFormControl내의 특정 메소드에 값을 보내기 .. 잘 되기는 하는데 한가지 문제가 ... [1]
119김용국3/22/200510522                    답변글 [답변]: 정상태님 아주 잘 해결 되었습니다.... 감사합니다!
108guest3/17/200510664닷넷 프레임워크 배포
111정성태3/19/200511190    답변글 [답변]: 닷넷 프레임워크 배포
107안연준3/17/200510368[-_-]스마트 클라이언트에 관련 된 질문[-_-]
110정성태3/19/200511260    답변글 [답변]: [-_-]스마트 클라이언트에 관련 된 질문[-_-]
116안연준3/21/200510642        답변글 [답변]: 친절한 답변 고맙습니다.
98김용국3/18/200512525정성태님... 연결이 준비됬습니다
99정성태3/2/200513493    답변글 [답변]: 정성태님... 연결이 준비됬습니다
100김용국3/18/200510455        답변글 [답변]: 죄송합니다! 급히올리느라 file path의 변경을 하지않고 그냥올렸네요....!
101정성태3/2/200510662            답변글 [답변]: [답변]: 죄송합니다! 급히올리느라 file path의 변경을 하지않고 그냥올렸네요....!
... 91  92  [93]  94  95  96  97