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

... 61  62  63  64  65  66  67  68  [69]  70  71  72  73  74  75  ...
NoWriterDateCnt.TitleFile(s)
864장근배2/1/201017992    답변글 [답변]: AppPolId를 알 수 있는 방법이 있는지요?
858생초보1/26/201018386안녕하세요.. 파일 생성 처리 문제로 .... [2]
857꼭지1/22/201024853How to support Basic + Windows authentication mode in WCF(RESTful service) [4]파일 다운로드2
856질의자1/13/201022088vcredist_x86 배포 관련 여쭙습니다. [1]
855임동찬1/13/201020824이벤트 핸들러와 쓰레드의 관계 2 [4]파일 다운로드2
854임동찬1/12/201020758이벤트 핸들러와 쓰레드의 관계 [1]
853장근배1/12/201019876압축 프로그램,, [1]
852임동찬1/6/201017148base.OnStart(agrs) [1]
851한귀순1/6/201022629oracle & transaction 질문 [5]
850박한주12/31/200919777COM과 C#간 권한 문제에 관해 여쭤봅니다. [5]
848날쌘돌이12/22/200920738C#으로 개발하는 ActiveX 디버깅 문제 [5]
847최승문12/16/200919520winform에서 웹서비스를 이용할때, 객체가 전송안되는 문제... [2]
846이강구12/14/200918476ATL COM 제작 문의 [3]
845김재영12/9/200921276ClickOnce에서 WinForm을 배포시 변동되는 Args값을 넘길 수 있나요? [3]파일 다운로드1
843김재영12/2/200918850Hyper-V 사용에 대해여 질문이 있습니다. [2]
842한귀순12/1/200921653Attempted to read or write protected memory [2]
841장근배11/30/200923455첨부 파일 Download시 한글 Name [2]
844장근배12/3/200917923    답변글 [답변]: 첨부 파일 Download시 한글 Name파일 다운로드1
840박영민11/20/200917869웹 애플리케이션 질문입니다. [1]
837left...10/21/200918545아래 게시글 관련하여 추가 질문 [3]
836left...10/19/200919522ActiveX 상에서 암시적 dll 로드 [1]
832김우진10/15/200916015C# 에서 swa + security 구현 방법이 없을까요?
833정성태10/15/200920416    답변글 [답변]: C#에서 swa + security 구현 방법이 없을까요? [1]
834김우진10/15/200916293        답변글 예제 메시지 올려드릴께요. [2]파일 다운로드1
838이영우10/30/200916211            답변글 국세청 전자세금계선서에 관하여 문의드립니다.
831채승수10/13/200918216스마트 클라이언트 GAC 등록 문제 여쭤봅니다... [2]
... 61  62  63  64  65  66  67  68  [69]  70  71  72  73  74  75  ...