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

常用编码详解

 2007-07-21 21:36:06 来源:WEB开发网   
核心提示: 3)从编码序列分配位到UCS-4字符,首先从序列最后一个8比特字节的最低位开始,常用编码详解(4),接着向左进行,直到所有标记为x的位完成,它可能导致安全问题或其他问题(比如把0当作数组结束标志),更详细的算法和公式可以在[FSS_UTF],如果UTF-8序列长度不大于3个8比特字节,解码

3)从编码序列分配位到UCS-4字符。首先从序列最后一个8比特字节的最低位开始,接着向左进行,直到所有标记为x的位完成。如果UTF-8序列长度不大于3个8比特字节,解码过程可以直接赋予UCS-2。

WCHAR UTF8ToUnicode(unsigned char *buffer)
{
  WCHAR temp = 0;
  if (buffer[0] < 0x80)                  // one char of UTF8
  {
    temp = buffer[0];
  }
  if ((0xc0 <= buffer[0]) && (buffer[0] < 0xe0))     // two char of UTF8
  {
    temp = buffer[0] & 0x1f;
    temp = temp << 6;
    temp = temp | (buffer[1] & 0x3f);
  }
  if ((0xe0 <= buffer[0]) && (buffer[0] < 0xf0))     // three char of UTF8
  {
    temp = buffer[0] & 0x0f;
    temp = temp << 6;
    temp = temp | (buffer[1] & 0x3f);
    temp = temp << 6;
    temp = temp | (buffer[2] & 0x3f);
  }
  if ((0x80 <= buffer[0]) && (buffer[0] < 0xc0))     // not the first byte of UTF8 character
    return 0xfeff;                    // 0xfeff will never appear in usual
  return temp;                      // more than 3-bytes return 0
}

注意:上面解码算法的实际实现应该进行安全保护,以便处理解码无效的系列。例如:实现可能(错误)解码无效的UTF-8系列0xC0 0x80为字符U+0000,它可能导致安全问题或其他问题(比如把0当作数组结束标志)。更详细的算法和公式可以在[FSS_UTF],[UNICODE] 或[ISO-10646]附录R中找到。

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

Tags:常用 编码 详解

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