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

比如说我有一个emoji

std::string emojiStr = "🌞";

他的unicode值是“U + 1F31E”

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

阅读 821
评论 更新于 2019-01-02
    1 个回答
    dxkite
    • 129

    如果你的代码是 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;
    }

    代码来源

    评论 赞赏 2019-01-02
      撰写回答

      登录后参与交流、获取后续更新提醒