Platform/QT [QT] 파일에서 읽은 한글 깨짐 현상
  • 728x90
    반응형

     

     

    목차

       

      개요

      md(markDown)파일에서 내용을 읽어 글을 출력하는 기능 구현중 읽어들인 한글이 깨지는 현상이 발생하였다.

      한글깨짐 현상을 해결하는 방법은 아래와 같다.

       

       

      한글깨짐 현상

      md(markDown) 파일 인코딩형식은 UTF-8로 작성하였다.

      참조한 코드베이스는 아래 GitHub 주소를 참조 하였다.

       

       

      GitHub - pixelgrease/MarkdownViewer: Droppable window which shows content of markdown document smaller than 64K.

      Droppable window which shows content of markdown document smaller than 64K. - GitHub - pixelgrease/MarkdownViewer: Droppable window which shows content of markdown document smaller than 64K.

      github.com

       

      FileReader.cpp 파일의  참조한 코드 내용중 파일을 읽어 들이는 코드는 아래와 같다.

       

      bool FileReader::readFile()
      {
          QFile f(m_filename);
          if (f.open(QFile::ReadOnly | QFile::Text)) {
              QTextStream in(&f);
              if (f.size() <= MAX_CONTENT_LEN) {
                  setContent(in.readAll());
      
                  return true;
              }
          }
      
          return false;
      }

       

      QTextStream 클래스의 readAll() 메서드는 QString 타입으로 반환한다. 메서드 원형은 아래와 같다.

      <QTextStream>

      QString readAll();

       

      QString 타입으로 받는경우 인코딩 문제로 한글 깨짐 현상이 발생한다. 이를 해결하기 위해 QString::fromUtf8() 메서드를 사용하려 했으나, QString::fromUtf8() 메서드는 인자로 QByteArray 타입을 사용하기 때문에 사용할 수 없었다.

       

      static inline QString fromUtf8(const QByteArray &str);

       

      이를 해결하기 위해 QTextStream 클래스를 사용하지 않고, QFile 클래스의 readAll() 메서드가 QByteArray 타입을 반환함으로 QFile 클래스의 readAll() 메서드를 사용하였다.

       

      <QFile>

      QByteArray readAll();

       

      수정한 코드는 아래와 같으며, UTF-8 인코딩으로 QString 타입을 반환 받아 한글깨짐 현상을 해결하였다.

       

      bool FileReader::reload(void)
      {
          bool ret = false;    
      
          if (m_isValid) {
              QFile file(m_filename);
      
              if (file.open(QFile::ReadOnly | QFile::Text)) {
                  if (file.size() < MAX_CONTENT_LEN) {
                      setContent(QString::fromUtf8(file.readAll()));  /* 한글 변환 */
                      ret = true;
                  }
              }
      
              file.close();
          }
      
          return ret;
      }

       

      728x90
      반응형

      'Platform > QT' 카테고리의 다른 글

      QTCreate 단축키 모음  (1) 2021.07.09
      Static(정적) 컴파일 방법  (0) 2018.09.03
      QT5 Installer Framework Tutorial  (0) 2018.01.24
      Qt5 QtXlsx 사용법  (0) 2018.01.17
      QT QCalendarWidget StyleSheet 설정  (0) 2017.10.19
    상단으로