WEB开发网
开发学院软件开发VC 常用编码详解 阅读

常用编码详解

 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位)来决定哪些位编码用于字符值。

上一页  1 2 3 4 5 6 7 8  下一页

Tags:常用 编码 详解

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接