- 리눅스에서 무선랜 인터페이스를 통해 주변의 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);
}
}