Microsoft MVP성태의 닷넷 이야기
c# 압축파일 읽어 올 때 BinaryRead 한글 처리 문제 [링크 복사], [링크+제목 복사],
조회: 12325
글쓴 사람
김영식 (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)
5658한예지 donator5/9/202214273교재 689, 690쪽(async/await) 질문입니다. [5]
5657C#초보5/8/202212718초보 단순 질문 입니다.,ㅠ [1]
5656부탁드립...5/6/20221500332bit dll 을 64bit dll 화 [2]
5655감사합니...5/5/202214814UI 스레드 관련 질문드립니다. [4]파일 다운로드1
5653고석주5/3/202212910첨부된 이미지처럼 dll 을 어떻게 추가해야 하는지 문의드립니다. [1]파일 다운로드1
5652감사합니...5/2/202211789프로그램 종료되면 리소스(관리, 비관리)는 알아서 해제 되나요? [2]
5651윤식4/26/202212821상속 구조 관련 질문드립니다. [8]
5650김기헌4/19/202212527WPF 리소스 관련 질문드립니다 [3]
5649주니어4/15/202211450ffmpeg 질문 있습니다! [2]
5648주니어개...4/13/202212116컴파일된 코드를 원시코드로 바꾸려면 어떻게해야하나요? [1]파일 다운로드1
5647장성욱4/7/202211938코어지정 CPU사용률 관련 질문 [1]
5646서형주4/6/202212281List에 여러개의 class 객체를 만들어 넣을때, 객체의 method들도 같이 생성되어 메모리를 차지하나요? [1]
5645김인태4/6/202211585윈도우즈 서버의 AD 계정 생성 조건이 있을까요? [1]
5644ㅇㅇ4/6/202212576c# 프로그램을 이용하여 리눅스상에 파일 생성이 가능한가요? [1]
5643유필재4/5/202212981TCP클라이언트 연결 및 통신관련하여 문의드려요 [1]
5642차가워4/4/202212904UdpClient 패킷 수신 문의 [4]
5641장성욱4/4/202212678코어 할당 및 cpu 부하테스트 질문 [7]
5640icoo...4/4/202213418웹가든에서 메모리 동적 업데이트 방법 [1]
5639차가워4/4/202214050c++ 서버 c# 클라이언트 호환 문의 [1]
5638초급4/3/202214161c# sql server 연동 [1]
5637따봉이4/1/202215592Winform Form Load 후 자동 캡쳐관련 [1]파일 다운로드1
5636김철순3/31/202214452WPF에서 Richtext의 View 문의 [5]
5635guest3/30/202213160안정적인 pinning이 가능하네요. [3]파일 다운로드1
5633꿀주세요3/30/202213108선생님 마우스 클릭이벤트 질문이 있습니다. [4]
5632김현수3/30/202213859Remote Desktop으로 접속시 WPF UI 가 다시 그려지는 이벤트를 막을 수 없을까요? [3]
5631김기헌3/24/202213254WPF 컨트롤의 그래픽 처리관련 질문드립니다 [2]파일 다운로드1
1  2  3  4  5  6  7  8  9  10  11  12  [13]  14  15  ...