QQ自带表情

最近在跟踪LumaQQ.NET的进展,发现一个问题,就是QQ的自带表情,也是直接用文本消息的方式传输过来的。
不过由于表情都是0x14开头的,这个编码不属于正常的文本编码,甚至直接放在XML都是非法字符,因此需要过滤,将其转成可以识别的文本。
具体的转法我就不写了,我是用ArrayList转的。相信这里有人有更好的写法。
这里就放一下对应的QQ表情包把,我把QQ表情的文件名改成和0x14后面一个字节一样的数字了,方便直接调用。
QQ默认表情包
posted @ 2008-04-09 13:11 蓝色的风之精灵 阅读(306) 评论(3)  编辑 收藏

  回复  引用  查看    
#1楼 2008-04-11 23:52 | 阿不      
嗯,让大家失望了
有时间先完善功能,然后再慢慢来修补一些不足
  回复  引用  查看    
#2楼 2008-04-21 09:25 | 阿不      
能不能具体说说该如何转换呢?
  回复  引用  查看    
#3楼 [楼主]2008-04-21 09:48 | 蓝色的风之精灵      
呵呵,用ArrayList转的,性能上有点问题吧,如果有泛型的ArrayList效率就会更高点
ArrayList al = new ArrayList();
al.AddRange(IMBytes);
byte[] IMTextBytes;
for (int i = 0; i < al.Count - 1; i++)
{

if ((FaceType)al[i] == FaceType.DEFAULT && (byte)al[i + 1] >= 0x40 && (byte)al[i + 1] <= 0xC7)//QQ的表情符号是0x14开头的,下一字节表示表情索引号。0x15开头的是自定义表情。这里处理系统表情,以免乱码。
{
string face = "<img src=\"face/" + al[i + 1].ToString() + ".gif\" />";
byte[] facebytes = Encoding.GetEncoding("GBK").GetBytes(face);
al.RemoveRange(i, 2);
al.InsertRange(i, facebytes);
i += facebytes.Length - 1;
}
}
IMTextBytes=new byte[al.Count];
al.CopyTo(0, IMTextBytes, 0, IMTextBytes.Length);
Encoding.GetEncoding("GBK").GetString(IMTextBytes);

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      


相关链接: