Language/C++

[C++] Utf8 코드를 한글로 출력하기

마탁이 2021. 5. 24. 14:08
  • 리눅스에서 무선랜 인터페이스를 통해 주변의 Wifi를 검색하여 목록을 출력하는 기능을 구현 중, ssid가 한글이면 uft8 코드로 출력되었다.
  • 한글 1개의 문자는 총 3개의 utf8 코드로 구성되어있으며 이를 잘 활용하면 식별할 수 있는 한글 문자(?)가 된다.
  • 실제 기능을 구현할 때는 한글 중간 특수문자를 포함한 다양한 문자가 사이사이 올 수 있음에 주의한다.
  • 크기 3의 char[]을 사용해 각 char 마다 utf8 코드를 넣어 한 개의 String으로 출력하였다.
  • 아래 코드는 실제 QT Project에서 사용한 일부분이다.
char hangulBuf[4] = {0,};
    int hanIdx = 0;
    foreach (const QString& item, srcSplit)
    {
        if('x' == item[0])
        {
            char hexBuf[8] = {0,};
            QString hexSlice = item[1];
            hexSlice += item[2];
            sprintf(hexBuf, "0x%s", hexSlice.toStdString().c_str());

            int utf8 = static_cast<int>(std::strtol(hexBuf, NULL, 0));
            hangulBuf[hanIdx] = static_cast<char>(utf8);

            if(2 == hanIdx)
            {
                dest.append(hangulBuf);

                memset(hangulBuf, '\0', sizeof(hangulBuf));
                hanIdx = 0;
                if(3 <= item.length())
                {
                    std::string remainStr = item.toStdString().substr(3);
                    dest.append(remainStr.c_str());
                }
            }
            else
            {
                hanIdx++;
            }
        }
        else
        {
            dest.append(item);
        }
    }