Microsoft MVP성태의 닷넷 이야기
c# 압축파일 읽어 올 때 BinaryRead 한글 처리 문제 [링크 복사], [링크+제목 복사]
조회: 3355
글쓴 사람
김영식 (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)
5644ㅇㅇ4/6/20224184c# 프로그램을 이용하여 리눅스상에 파일 생성이 가능한가요? [1]
5643유필재4/5/20224075TCP클라이언트 연결 및 통신관련하여 문의드려요 [1]
5642차가워4/4/20224335UdpClient 패킷 수신 문의 [4]
5641장성욱4/4/20224745코어 할당 및 cpu 부하테스트 질문 [7]
5640icoo...4/4/20224279웹가든에서 메모리 동적 업데이트 방법 [1]
5639차가워4/4/20224200c++ 서버 c# 클라이언트 호환 문의 [1]
5638초급4/3/20224511c# sql server 연동 [1]
5637따봉이4/1/20224774Winform Form Load 후 자동 캡쳐관련 [1]파일 다운로드1
5636김철순3/31/20224742WPF에서 Richtext의 View 문의 [5]
5635guest3/30/20224736안정적인 pinning이 가능하네요. [3]파일 다운로드1
5633꿀주세요3/30/20224360선생님 마우스 클릭이벤트 질문이 있습니다. [4]
5632김현수3/30/20224739Remote Desktop으로 접속시 WPF UI 가 다시 그려지는 이벤트를 막을 수 없을까요? [3]
5631김기헌3/24/20224349WPF 컨트롤의 그래픽 처리관련 질문드립니다 [2]파일 다운로드1
5630장성욱3/24/20224160로깅관련 질문입니다. [2]
5629감사합니...3/23/20224406함수에서 예외가 발생하면 try ~ catch처리기를 찾을 때 까지 상위 함수로 계속 올라가나요? [2]
5628홍길동3/23/20225061질문드립니다. [2]파일 다운로드1
5626연준혁3/21/20224307안녕하세요. [3]
5625jaew...3/18/20225252c# 8.0 도서를 구입한 사람입니다. [1]
5624초보자3/17/20224215람다 캡처 관련 문의 [2]
5623한예지 donator3/15/20224618인터프리터 원리가 궁금합니다. [4]
5622김민아3/8/20224522const와 readonly의 명확한 차이가 이게 맞나요? [2]
5621장성욱3/8/20224275c# 로그 관련 질문 [1]
5620김민아3/7/20224320안녕하세요 비관리 객체를 반환하는 메소드 호출 시 궁금한 점이 있어서 질문드립니다 [2]
5619팡팡이3/3/20225681RSA 문의드립니다. [3]
5618김기헌3/2/20224167안녕하세요 생성자 옆에 this 키워드를 붙여 생성자를 여러 개 호출 시 질문드립니다 [2]
5617Edun2/25/20224264ArgumentOutOrRangeException에러 발생 [2]파일 다운로드1
1  2  3  4  5  6  7  8  9  10  11  [12]  13  14  15  ...