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
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个字节
而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个字节
#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
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个字节
而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
给lz发个链接 看看字符编码的历史 就都明白啦。。 http://blog.sina.com.cn/s/blog_4e3d894e0100akys.html
#9
下面这个 经典 我以前就是看这个明白的
http://blog.csdn.net/zhedatianrui/archive/2009/11/01/4754970.aspx
http://blog.csdn.net/zhedatianrui/archive/2009/11/01/4754970.aspx