Microsoft MVP성태의 닷넷 이야기
c# 압축파일 읽어 올 때 BinaryRead 한글 처리 문제 [링크 복사], [링크+제목 복사],
조회: 13036
글쓴 사람
김영식 (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을 해야 합니다.
정성태

1  2  3  4  5  6  [7]  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
5816흰털너부리2/6/202311736.net core json array validation 질문 드립니다. [1]
5815김재영2/6/202311503종단간 암호화에 대해 시나리오인데 타당한 시나리오일까요? [2]
5814한예지 donator2/6/202312637decompile? [9]
5813김재영2/5/202313042openssl genrsa 2048시 키 생성이 다르게 됩니다. - 파일첨부 [4]파일 다운로드1
5812김재영2/5/202313537openssl genrsa 2048시 키 생성이 다르게 됩니다. [2]
5811치르바2/3/202312849MiniDumpWriteDump API로 덤프수집을 했는데요.. [3]
5810이건우1/31/202313675윈도우서비스를 통한 웹통신관련 질문입니다 [3]
5809이상훈1/31/202314161다채널 영상 디스플레이어 개발 관련 질문입니다. [3]
5808근우1/30/202314316WPF 에서 UserControl 과 ControlTemplate 의 차이점은 무엇인가요? [6]
5807궁금맨1/28/202317080C# 10 책에 나온 예제의 결과가 제 컴에서는 좀 달라서요. 이유가 궁금합니다. [1]
5806스레드1/25/202312633총정리 - 다양한 스레드들 [초안] [1]파일 다운로드1
5805어웨이트1/25/202312933Taskcontinuewith vs Async/Await [2]파일 다운로드1
5804나이많은...1/25/202312167MS의 Dependency Injection(DI)에 AddSingleton으로 등록된 객체의 Event 등록후 사용시 앱 종료시 별도로 Event를 해지해야 하나요? [2]
5803dssc...1/24/202313949드라이브 문자를 통해서 물리 디스크 명칭을 알아내고 싶습니다. [1]
5802모바일앱1/22/202314404XAMARINE vs Android Studio [7]
5801블루투스1/19/202315057WPF 은행지폐계수기 개조 후 결과값 서버 전송 [2]파일 다운로드1
5800김민아1/19/202315590안녕하세요 가비지 컬렉터 동작 원리 중 궁금한점이 있습니다 [5]
5799guest1/19/202313616C# 공유폴더 내 Acess 디비 공유 [2]
5798kss1/19/202311940책 오탈인가요? [1]
5797이거비버1/19/202311579C# 공부 이후 MS 프레임워크.. 어느것을 공부해야할까요? 너무 많아서 정신이 없네요 [5]
5796guest1/19/202311848해킹 test [3]
5795동기1/18/202310671동기 스레드와 메서드와 While [2]
5794박규동1/18/202310810.net publish 할때마다 runtimeconfig 값이 바뀌는 현상 [1]
5793후후훗1/18/202311634.NET Core 에서 사용중인 함수 후킹 방법 [2]
5792Will...1/18/202311913소스코드 Log Write 기능을 리스트업 질문 [9]
5791PLC1/16/202311795C# - 실시간 5개 룸 모니터링 [15]
1  2  3  4  5  6  [7]  8  9  10  11  12  13  14  15  ...