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

... 16  17  18  19  20  [21]  22  23  24  25  26  27  28  29  30  ...
NoWriterDateCnt.TitleFile(s)
5434한예지 donator12/23/202015131ToString 재정의 질문있습니다! [8]
5433한예지 donator12/23/202015321List<ArrarySegment<int>> 사용법 질문드립니다! [2]
5431한예지 donator12/17/202016497비동기 소켓 서버 질문 드립니다! [1]
5430종범12/16/202015496[WPF] Task 관련 재질문 드립니다. [2]파일 다운로드1
5429종범12/16/202016068[WPF] Task 관련 질문 드립니다. [1]파일 다운로드1
5428최선호 donator12/14/202015888성태님 ㅠ.ㅠ 소켓 서버 작동이 이상합니다 ㅠ.ㅜ [1]파일 다운로드1
542712/11/202016518LPBOOL Win32 마샬링 질문이 있습니다. [6]
5426하태12/11/202014086안녕하세요 정성태님! C# winform Calendar 컨트롤 질문 드리겠습니다!. [1]
5425정유경12/10/202014471[왕초보] (4) [1]
5423정유경12/8/202014548[왕초보] (3) [2]
5422이승준12/7/202019955VisualStudio 2019의 인텔리센스가 느려지는 경우가 있나요? [4]
5421정유경12/6/202016307[왕초보] (2) [4]
5420정유경12/5/202016371[왕초보] 랜덤 숫자와 배열에 관한 질문 [1]
5419종범12/4/202016634[WPF] Threadpool사용 시 크리티컬 섹션 대응 질문 입니다. [4]
5418한예지 donator11/27/202017099클래스, 인터페이스 크기를 구하고 싶은데 어떻게 해야 될까요? [1]
5417한예지 donator11/27/202014770인터페이스와 추상클래스에 대해 궁금증이 있습니다. [1]
5416한예지 donator11/27/202014692Object 질문 있어요. [1]
5415한예지 donator11/25/202014287교재 213쪽 예제 4.25 질문드립니다. [1]
5414한예지 donator11/23/202015702제네릭 리스트 출력하는 방법이 궁금합니다. [1]
5413민석11/20/202016803C# minidump를 프로그램이 중단 될 때 만들고 싶습니다. [1]파일 다운로드2
5411원격11/20/202014694visualstdio로 웹 사이트로 만들었을때 원격 디버깅이 가능한가요? [1]
5410최성재11/16/202015158vcpkg로 GDCM 내려받을 때 USE_VTK 설정하는 방법-2번째 질문 [1]파일 다운로드1
5409민성11/16/202018276혹시 다른 질문이긴 한데요 [1]
5408최성재11/16/202014951vcpkg로 GDCM 내려받을 때 USE_VTK 설정하는 방법 [1]
5407민성11/11/202013555안녕하세요 yield return에 대해서 [1]
5406질문자11/10/202014573안녕하세요 wcf nettcpbinding의 timeout에 관해서 질문이 있습니다. [2]
... 16  17  18  19  20  [21]  22  23  24  25  26  27  28  29  30  ...