UTF-8到Unicode的转换 纯C语言代码

时间:2021-02-13 20:14:46
如题,求UTF到Unicode的转换,最近项目中用到,在网上找了好久,大都是借用c++的库函数,我现在需要纯c语言的代码。苦恼中。。。多谢各位高手!

9 个解决方案

#1


http://bbs.chinaunix.net/viewthread.php?tid=1370274

#2


************************************************************************
 *  Function: Utf8ToUnicode
 ************************************************************************/
static void Utf8ToUnicode(char* unicode, char *utf8)
{
    char *pchar = utf8;
    int nBytes = 0;
    
    if (0 == (*utf8 & 0x80)) 
    {
        /*
         * single-byte char
         */
        nBytes = 1;
        unicode[0] = *utf8;
    }
    else
    {
        /*
         * 3-byte char (chinese char)
         */
        int i;

        if ( (*utf8 & 0xf0) == 0xe0 ) 
        {
            nBytes  = 3;
            unicode[0] = ((utf8[0] & 0x0f) <<4) + ((utf8[1] & 0x3c) >>2);
            unicode[1] = ((utf8[1] & 0x03) <<6) + (utf8[2] & 0x3f);
        }
        else
        {
            debug("ERROR: utf-8 to unicode, nBytes !=3\n");
            nBytes = 0;
            unicode[0] = '?';
            return;
        }
    }

    return;
}


http://blog.chinaunix.net/u2/84258/showart_1839662.html

#3


楼上的代码有问题吧。我现在需要用纯C写的。不参杂任何C++或其他的东西

#4


引用 3 楼 fengqiaoyebo2008 的回复:
楼上的代码有问题吧。我现在需要用纯C写的。不参杂任何C++或其他的东西


2楼提供的代码好像没有C++的成分,好像都是ANSI C。

#5


UTF-8本来就是unicode编码,何来转换之说?

#6


UTF-8是unicode的实现,反正就是分析第一个字节就可以了,前几个位表示长度。要用到位操作

#7


Unicode字符集的范围是U-00000000 - U-7FFFFFFF
而UTF-X,是其具体的实现方法。中的X表示最小bit数,如:UTF-8表示的Unicode字符集其单个字符的存储最小为 1个字节(8bit),最大为 6个字节(48bit)(实际区间为1-4个字节,因为U-00200000 - U-7FFFFFFF一般用不到)。汉字为3个字节

而Windows下使用的Unicode字符集实现方法为UTF-16其单个字符的存储区间 2-4个字节,但大部分字符(包括汉字)都能用2个字节表示

还有一种Unicode字符集实现方法为UTF-32其单个字符的存储为 4个字节

#8


上面已经解释的很清楚了 。。。
给lz发个链接 看看字符编码的历史 就都明白啦。。 http://blog.sina.com.cn/s/blog_4e3d894e0100akys.html

#9


下面这个 经典 我以前就是看这个明白的
http://blog.csdn.net/zhedatianrui/archive/2009/11/01/4754970.aspx

#1


http://bbs.chinaunix.net/viewthread.php?tid=1370274

#2


************************************************************************
 *  Function: Utf8ToUnicode
 ************************************************************************/
static void Utf8ToUnicode(char* unicode, char *utf8)
{
    char *pchar = utf8;
    int nBytes = 0;
    
    if (0 == (*utf8 & 0x80)) 
    {
        /*
         * single-byte char
         */
        nBytes = 1;
        unicode[0] = *utf8;
    }
    else
    {
        /*
         * 3-byte char (chinese char)
         */
        int i;

        if ( (*utf8 & 0xf0) == 0xe0 ) 
        {
            nBytes  = 3;
            unicode[0] = ((utf8[0] & 0x0f) <<4) + ((utf8[1] & 0x3c) >>2);
            unicode[1] = ((utf8[1] & 0x03) <<6) + (utf8[2] & 0x3f);
        }
        else
        {
            debug("ERROR: utf-8 to unicode, nBytes !=3\n");
            nBytes = 0;
            unicode[0] = '?';
            return;
        }
    }

    return;
}


http://blog.chinaunix.net/u2/84258/showart_1839662.html

#3


楼上的代码有问题吧。我现在需要用纯C写的。不参杂任何C++或其他的东西

#4


引用 3 楼 fengqiaoyebo2008 的回复:
楼上的代码有问题吧。我现在需要用纯C写的。不参杂任何C++或其他的东西


2楼提供的代码好像没有C++的成分,好像都是ANSI C。

#5


UTF-8本来就是unicode编码,何来转换之说?

#6


UTF-8是unicode的实现,反正就是分析第一个字节就可以了,前几个位表示长度。要用到位操作

#7


Unicode字符集的范围是U-00000000 - U-7FFFFFFF
而UTF-X,是其具体的实现方法。中的X表示最小bit数,如:UTF-8表示的Unicode字符集其单个字符的存储最小为 1个字节(8bit),最大为 6个字节(48bit)(实际区间为1-4个字节,因为U-00200000 - U-7FFFFFFF一般用不到)。汉字为3个字节

而Windows下使用的Unicode字符集实现方法为UTF-16其单个字符的存储区间 2-4个字节,但大部分字符(包括汉字)都能用2个字节表示

还有一种Unicode字符集实现方法为UTF-32其单个字符的存储为 4个字节

#8


上面已经解释的很清楚了 。。。
给lz发个链接 看看字符编码的历史 就都明白啦。。 http://blog.sina.com.cn/s/blog_4e3d894e0100akys.html

#9


下面这个 经典 我以前就是看这个明白的
http://blog.csdn.net/zhedatianrui/archive/2009/11/01/4754970.aspx