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

... 76  77  78  79  80  81  82  83  84  85  [86]  87  88  89  90  ...
NoWriterDateCnt.TitleFile(s)
321셈토2/18/200610855SPOOL --> EMF --> TEXTOUT [1]
320정보문2/18/200610669파일의 최대 크기2 [1]
318정보문2/18/200611815파일의 최대 크기
319정성태2/18/200611830    답변글 [답변]: 파일의 최대 크기 [1]
317narc...2/17/200610973[IE embeded SmartClient]에서 닷넷 리모팅 프록시 사용시 처음 2분간 딜레이현상이 발생합니다. [1]
322narc...2/20/200611800    답변글 [답변]: 다시한번 부탁드리겠습니다..
316이경찬2/15/200613195MSDN 매거진 정기구독 신청은 어디서 할수있나요? [1]
315정준명2/15/200616639[DxFramework Lite] 분산 트랜잭션에 참여하는 동안 오류가 발생했습니다. [2]
314이윤희2/14/200610855엑셀변환시....그림을 넣을려면. [1]
313장강현2/14/200611009SmartClient 디버그 문제 [1]
312정보문2/13/200611065방법2006 [1]
309정보문2/10/200612181edit & continue [3]
308김용국2/11/200610679스마트클라이언트 관련질문 [ Client 에서 WebPage의 JavaScript 호출방법이 있을까요? 있다고는 한것 같은데..부탁드림^^
310정성태2/11/200610203    답변글 [답변]: 스마트클라이언트 관련질문 [ Client 에서 WebPage의 JavaScript 호출방법이 있을까요? 있다고는 한것 같은데..부탁드림^^
307narc...2/10/200611913IE Embeded 스마트클라이언트는 UserControl만 가능한가요? [2]
305정보문2/10/200612058웹 컨트롤
306정성태2/10/200611695    답변글 [답변]: 웹 컨트롤
303정보문2/10/200612631회원가입성공을 기념으로 질문 한 가지 던집니다.
304정성태2/10/200611032    답변글 [답변]: 회원가입성공을 기념으로 질문 한 가지 던집니다.
302김성2/7/200612179C#이나 VB.NET 으로 만든 것을 SETUP 해서 배포하려고 하는데요.. [1]
301참깨2/3/200616428개체가 이 속성 또는 메소드를 지원하지 않습니다. [1]
300김종욱2/2/200610824안녕하세요 [2]
299꼬부기1/19/200610063스마트클라이언트 관련 질문입니다... [2]
298정말초짜1/12/200610288smart client 질문입니다. [1]
296우승우1/4/20069957스마트클라이언트에서 COM+를 이용한 데이터 가져 오기..
297정성태1/4/200611913    답변글 [답변]: 스마트클라이언트에서 COM+를 이용한 데이터 가져 오기.. [2]
... 76  77  78  79  80  81  82  83  84  85  [86]  87  88  89  90  ...