您的位置:首页 > 编程语言 > C语言/C++

unicode 转 utf8

2017-07-12 16:07 148 查看
int unicode_to_utf8(uint16 *in, int insize, unsigned char **out)

{

    int i = 0;

    int outsize = 0;

    int charscount = 0;

    unsigned char *result = NULL;

    unsigned char *tmp = NULL;

    charscount = insize;

    result = (unsigned char*)malloc(charscount * 3 + 1);

    memset(result, 0, charscount * 3 + 1);

    tmp = result;

    for (i = 0; i < charscount; i++)

    {

        uint16 unicode = in[i];

        if (unicode >= 0x0000 && unicode <= 0x007f)

        {

            *tmp = (char)unicode;

            tmp += 1;

            outsize += 1;

        }

        else if (unicode >= 0x0080 && unicode <= 0x07ff)

        {

            *tmp = 0xc0 | (unicode >> 6);

            tmp += 1;

            *tmp = 0x80 | (unicode & (0xff >> 2));

            tmp += 1;

            outsize += 2;

        }

        else if (unicode >= 0x0800 && unicode <= 0xffff)

        {

            *tmp = 0xe0 | (unicode >> 12);

            tmp += 1;

            *tmp = 0x80 | (unicode >> 6 & 0x003f);

            tmp += 1;

            *tmp = 0x80 | (unicode & (0xff >> 2));

            tmp += 1;

            outsize += 3;

        }

    }

    *tmp = '\0';

    *out = result;

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ unicode utf-8