Microsoft MVP성태의 닷넷 이야기
c# 압축파일 읽어 올 때 BinaryRead 한글 처리 문제 [링크 복사], [링크+제목 복사],
조회: 12395
글쓴 사람
김영식 (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)
315정준명2/15/200618021[DxFramework Lite] 분산 트랜잭션에 참여하는 동안 오류가 발생했습니다. [2]
314이윤희2/14/200612228엑셀변환시....그림을 넣을려면. [1]
313장강현2/14/200612438SmartClient 디버그 문제 [1]
312정보문2/13/200612496방법2006 [1]
309정보문2/10/200613589edit & continue [3]
308김용국2/11/200612160스마트클라이언트 관련질문 [ Client 에서 WebPage의 JavaScript 호출방법이 있을까요? 있다고는 한것 같은데..부탁드림^^
310정성태2/11/200611590    답변글 [답변]: 스마트클라이언트 관련질문 [ Client 에서 WebPage의 JavaScript 호출방법이 있을까요? 있다고는 한것 같은데..부탁드림^^
307narc...2/10/200613386IE Embeded 스마트클라이언트는 UserControl만 가능한가요? [2]
305정보문2/10/200613512웹 컨트롤
306정성태2/10/200612890    답변글 [답변]: 웹 컨트롤
303정보문2/10/200614025회원가입성공을 기념으로 질문 한 가지 던집니다.
304정성태2/10/200612340    답변글 [답변]: 회원가입성공을 기념으로 질문 한 가지 던집니다.
302김성2/7/200613584C#이나 VB.NET 으로 만든 것을 SETUP 해서 배포하려고 하는데요.. [1]
301참깨2/3/200617914개체가 이 속성 또는 메소드를 지원하지 않습니다. [1]
300김종욱2/2/200612226안녕하세요 [2]
299꼬부기1/19/200611204스마트클라이언트 관련 질문입니다... [2]
298정말초짜1/12/200611459smart client 질문입니다. [1]
296우승우1/4/200611100스마트클라이언트에서 COM+를 이용한 데이터 가져 오기..
297정성태1/4/200613121    답변글 [답변]: 스마트클라이언트에서 COM+를 이용한 데이터 가져 오기.. [2]
295이경호12/22/200511470스마트 클라이언트 관련 고견을 듣고자 합니다. [1]
294김성국12/21/200513436^^ 오늘 첨 방문했습니다. [2]
292궁금해요12/16/200512502c#으로 개발된 ie 임베디드 smart client를 php페이지에서 사용이 가능한가요?
293정성태12/21/200513178    답변글 [답변]: c#으로 개발된 ie 임베디드 smart client를 php페이지에서 사용이 가능한가요?
290이종은12/16/200520050개체가 이 속성 또는 메서드를 지원하지 않습니다. [3]
289이진우12/14/200513705스마트 클라이언트 개념.. [1]
288박찬용12/13/200512761질문 한개만 할께요.. 아시면 꼭 답변 부탁드려요 [1]
... 76  77  78  79  80  81  82  83  84  85  [86]  87  88  89  90  ...