Microsoft MVP성태의 닷넷 이야기
c# 압축파일 읽어 올 때 BinaryRead 한글 처리 문제 [링크 복사], [링크+제목 복사],
조회: 10489
글쓴 사람
김영식 (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)
87정성태2/22/200512289    답변글 [답변]: Smart Client에 관한 문의 드립니다.
82천호민2/1/200511148데이터 그리드의 템플릿필드에 버튼 컨트롤을 넣구요.. 포스트백시 이전 위치에 포커스를 주고 싶은데요..
83정성태2/2/200511966    답변글 [답변]: 데이터 그리드의 템플릿필드에 버튼 컨트롤을 넣구요.. 포스트백시 이전 위치에 포커스를 주고 싶은데요..
79정형균1/26/200511933드디어 정성태님을 찾았네요..^^; 스마트 클라이언트 구현하는데 배포시 문제때문에 죽겠습니다...
80정성태1/26/200510538    답변글 [답변]: 드디어 정성태님을 찾았네요..^^; 스마트 클라이언트 구현하는데 배포시 문제때문에 죽겠습니다...
76임은선1/25/200511502질문이 있는데요....
77정성태1/25/200511860    답변글 [답변]: 질문이 있는데요....
78임은선1/26/200512416        답변글 [답변]: [답변]: 질문이 있는데요....
72최정희1/19/200511841또 접니다.
73정성태1/19/200511665    답변글 [답변]: 또 접니다. [2]
74최정희1/19/200511001        답변글 [답변]: [답변]: 당연히 도움이 되지요.
75정성태1/19/200511580            답변글 [답변]: [답변]: [답변]: 당연히 도움이 되지요.
69최정희10/13/200410938저 기억하실런지? 그때 두리로IE툴바 만들어 주셨죠.
62엄길웅10/1/200412175매번 물어보기만 하는군요..
63정성태10/2/200412011    답변글 [답변]: 매번 물어보기만 하는군요..
64keal...10/5/200413579        답변글 [답변]: [답변]: 매번 물어보기만 하는군요..
65정성태10/6/200413521            답변글 [답변]: [답변]: [답변]: 매번 물어보기만 하는군요..
68keal...10/11/200411173                답변글 [답변]: [답변]: [답변]: [답변]: 매번 물어보기만 하는군요..
71정성태10/31/200411226                    답변글 [답변]: [답변]: [답변]: [답변]: [답변]: 매번 물어보기만 하는군요..
58엄길웅9/30/200411363안녕하세요.. 추석은 잘 보내셨는지요?
59정성태9/30/200411550    답변글 [답변]: 안녕하세요.. 추석은 잘 보내셨는지요?
60엄길웅10/1/200411317        답변글 [답변]: [답변]: 안녕하세요.. 추석은 잘 보내셨는지요?
56엄길웅9/23/200411648ATL을 이용해서 함수를 하나 만들었습니다.
57정성태9/23/200412677    답변글 [답변]: ATL을 이용해서 함수를 하나 만들었습니다.
61엄길웅10/1/200411309        답변글 [답변]: [답변]: ATL을 이용해서 함수를 하나 만들었습니다.
54차광석8/26/200411521잘 지내시죠?
... 91  92  93  94  [95]  96  97