C++ 如何得到emoji的Unicode值?

枢机主教
  • 68

比如说我有一个emoji

std::string emojiStr = "🌞";

他的unicode值是“U + 1F31E”

请教如何用emojiStr得到下面那个unicode?

回复
阅读 3.5k
1 个回答

如果你的代码是 utf-8 编码(如果不是,也建议采用utf-8编码),你写入的 emoji 文件也是 utf-8,建议转换为 unicode 编码,
随便找了份代码:

static int z_pos(uint8_t x)
{
    for (int i = 0; i < 5; i++, x <<= 1) {
        if ( (x & 0x80) == 0 )
            return i;
    }

    return 4;
}

// convert UTF-8 string to wstring
std::wstring utf8_to_wstring(const std::string& str)
{
    std::wstring loc;
    uint8_t mask[5] = { 0x7f, 0x3f, 0x1f, 0x0f, 0x7};

    for (size_t i = 0; i < str.length();) {
        int byte_cnt = z_pos(str[i]);
        uint16_t sum = str[i] & mask[byte_cnt];

        for (size_t j = 1; j < byte_cnt; j++) {
            sum <<= 6;
            sum |= str[i+j] & mask[1];
        }

        i += byte_cnt ? byte_cnt : 1;
        loc.push_back(sum);
    }

    return loc;
}

代码来源

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏