목차
md(markDown)파일에서 내용을 읽어 글을 출력하는 기능 구현중 읽어들인 한글이 깨지는 현상이 발생하였다.
한글깨짐 현상을 해결하는 방법은 아래와 같다.
md(markDown) 파일 인코딩형식은 UTF-8로 작성하였다.
참조한 코드베이스는 아래 GitHub 주소를 참조 하였다.
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;
}
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 |