Microsoft MVP성태의 닷넷 이야기
c# 압축파일 읽어 올 때 BinaryRead 한글 처리 문제 [링크 복사], [링크+제목 복사],
조회: 12344
글쓴 사람
김영식 (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)
5604LW2/9/202213616VISUAL STUDIO 2019 ==> 2020 설치시 오류가 생겨서 문의드립니다. [3]
5603김진명2/9/202214370C# 10.0 출간은 언제쯤 계획하고 계신가요? [1]
5602신갑영2/8/202213061윈폼에 대해서 질문 드립니다. [1]
5601김인태2/4/202212860setup project 관련 [7]
5600itkim2/3/202215845윈도우 서버 계정 패스워드 인증 문의 [5]
5599레드골드2/3/202216928c#으로 ms word 제어 가능할까요? [6]
5598jaew...2/2/202213496Dictionary는 참조형식인가요?? [1]
5597재원2/2/202214386c# 9.0에 대한 내용을 받을 수 있나요? [1]
5596kss1/26/202213590듀얼 모니터 환경에서 wpf 프로그램 크기 변경 [2]
5594mira...1/25/202212633안녕하세요 try~catch 와 SuspendLayout~ResumeLayout 간 호출 문의드립니다! [2]
5593C#스터디1/12/202214841TaskAwaiter 구현 질문 입니다. [1]
5591유지킴12/24/202113713outofmemory in 32bit [2]파일 다운로드1
5590kss12/23/202112863포인터 메모리 에러 [1]
5589초급12/22/202112715c# -> 라즈베리파이(db 접속)시 에러 발생 [7]
5588김지신12/21/202113409안녕하세요 String 변수 참조 주소 질문입니다. [2]
5587이완호12/17/202115441C# SharpDX 화면 캡쳐 관련해서 질문 드립니다. [1]
5586조미김12/16/202113767윈폼에서 메인 스레드와 UI 스레드의 차이점 질문드립니다 [4]
5585김준희12/16/202114770C# 윈폼 TCP/IP 데이터 연속으로 보낼때 [1]
5583난인간이다12/10/202112787.net 6 dynamic pgo 활성화 및 예상되는 문제 [1]
5582김준희12/9/202123302C# TCP/IP 통신시 연결 끊김 에러 [1]
5581김시준12/9/202114332닷넷에서 파일 delete 함수는 왜 비동기가 없는 것인가요? [2]
5580카짜프로...12/7/202116226패턴매칭 -튜퓰비교에 관한 오류사항과 궁금증 [1]파일 다운로드1
5579카짜프로...12/6/20211486111.12 메서드 중복정의에 대한 질문 [1]
5577감사합니...11/30/202114404visual studio 2015 update 3를 다운받을려고 하는데 x64/x86 차이점이 뭘까요? [2]
5576노홍구11/29/202114484C# 으로 USB 스캐너 프린터 리셋하기 입니다. [1]
5575베라11/23/202114118event handler 관련 문의 [2]
1  2  3  4  5  6  7  8  9  10  11  12  13  14  [15]  ...