C++ 判断是否存在Emjoi表情
弄了很久才弄出来,做个记录
bool isContainEmoji(const std::string str)
{
bool bContain = false;
std::u16string ut16 = {};
if (StringUtils::UTF8ToUTF16(str, ut16))
{
if (false == ut16.empty())
{
size_t len = ut16.length();
for (size_t i = 0; i < len; ++i)
{
char16_t hs = ut16[i];
if (0xd800 <= hs && hs <= 0xdbff)
{
if (ut16.length() > (i + 1))
{
char16_t ls = ut16[i + 1];
int uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000;
if (0x1d000 <= uc && uc <= 0x1f77f)
{
bContain = true;
break;
}
}
}
else
{
if (0x2100 <= hs && hs <= 0x27ff)
{
bContain = true;
}
else if (0x2B05 <= hs && hs <= 0x2b07)
{
bContain = true;
}
else if (0x2934 <= hs && hs <= 0x2935)
{
bContain = true;
}
else if (0x3297 <= hs &&a