常用编码详解
2007-07-21 21:36:06 来源:WEB开发网核心提示: 说明:对于合法的Unicode字符数组,可以通过逐个输入数组中的字符,常用编码详解(8),连续调用上面的函数,得到一个UTF-7字节序列,可以通过连续输入字节并调用上面的函数,判断返回值,需要说明的是:最后一个Unicode字符应该是上面三个字节数组中某个字符的等值,下面
说明:对于合法的Unicode字符数组,可以通过逐个输入数组中的字符,连续调用上面的函数,得到一个UTF-7字节序列。需要说明的是:最后一个Unicode字符应该是上面三个字节数组中某个字符的等值。
下面,我们实现一个简单的说明函数,功能是:输入一个UTF-7字节,可能得到并返回一个合法Unicode字符;也可能不能得到,比如遇到''+''或者因为还没有完成一个字符的拼装,这时返回一个标志字符0xfeff,这个字符常用来标志Unicode编码。
注:函数影响了state,nbits,bitBuffer三个全局变量。在开始处理第一个字节时候,变量需要被初始化为:
state = IN_ASCII;
nbits = 0;
bitBuffer = 0;
#define RET0 0xfeff
WCHAR UTF7ToUnicode(byte c)
{
if(state == IN_ASCII)
{
if (c == ''+'')
{
state = AFTER_PLUS;
return RET0;
}
else
return (WCHAR)c;
}
if (state == AFTER_PLUS)
{
if (c == ''-'')
{
return (WCHAR)''+'';
}
else
{
state = IN_BASE64;
nbits = 0;
bitBuffer = 0; // it is not necessary
// don''t return yet, continue to the IN_BASE64 mode
}
}
// state == Base64
if (byteType[c] & BASE64)
{
bitBuffer <<= 6;
bitBuffer |= base64Value[c];
nbits += 6;
if (nbits >= 16)
{
nbits -= 16;
return (WCHAR)((bitBuffer >> nbits) & 0x0000ffff);
}
return RET0;
}
// encount a byte which is not in base64 character set, switch out of base64 coding
state = IN_ASCII;
if (c != ''-'')
{
return (WCHAR)c;
}
return RET0;
}
说明:对于一个UTF-7序列,可以通过连续输入字节并调用上面的函数,判断返回值,得到一个Unicode字符数组。
更多精彩
赞助商链接