常用编码详解
2007-07-21 21:36:06 来源:WEB开发网核心提示: 这里我们仅仅实现Unicode到UTF8的转换,Unicode都是两个字节,常用编码详解(3),定义为:typedef usigned short WCHAR// 输出的UTF8编码至多是3个字节,int UnicodeToUTF8(WCHAR ucs2, unsigned char *b
这里我们仅仅实现Unicode到UTF8的转换,Unicode都是两个字节,定义为:
typedef usigned short WCHAR
// 输出的UTF8编码至多是3个字节。
int UnicodeToUTF8(WCHAR ucs2, unsigned char *buffer)
{
memset(buffer, 0, 4);
if ((0x0000 <= ucs2) && (ucs2 <= 0x007f)) // one char of UTF8
{
buffer[0] = (char)ucs2;
return 1;
}
if ((0x0080 <= ucs2) && (ucs2 <= 0x07ff)) // two char of UTF8
{
buffer[1] = 0x80 | char(ucs2 & 0x003f);
buffer[0] = 0xc0 | char((ucs2 >> 6) & 0x001f);
return 2;
}
if ((0x0800 <= ucs2) && (ucs2 <= 0xffff)) // three char of UTF8
{
buffer[2] = 0x80 | char(ucs2 & 0x003f);
buffer[1] = 0x80 | char((ucs2 >> 6) & 0x003f);
buffer[0] = 0xe0 | char((ucs2 >> 12) & 0x001f);
return 3;
}
return 0;
}
理论上,简单的通过用2个0值的8比特字节来扩展每个UCS-2字符,则从UCS-2到UTF-8编码的算法可以从上面得到。然而,从D800到DFFF间的UCS-2值对(用Unicode说法是代理对),实际上是通过UTF-16来进行UCS-4字符转换,因此需要特别对待:UTF-16转换必须未完成,先转换到于UCS-4字符,然后按照上面过程进行转换。
从UTF-8到UCS-4解码过程如下:
1)初始化UCS-4字符4个8比特字节的所有位为0。
2)根据序列中8比特字节数和上表中第二列(标记为x位)来决定哪些位编码用于字符值。
更多精彩
赞助商链接