这是所有更新中技术含量相对比较高的一次,增加了显示来访者地理位置的功能。
忙碌了周末两天,终于在周一完成了收尾。成功实现了asp读取纯真IP数据库(QQWry.dat)的功能,非常兴奋哦~~
原理也不难,可惜参考的资料不多(不多到只搜到Luma的一篇文章:http://lumaqq.linuxsir.org/article/qqwry_format_detail.html)。
难点:
1、QQWry.dat采用ANSI编码,而非Unicode。
用vbscript的chr()不能正确显示(网上很多资料都利用这种方法,可惜我自己调试不成功),而chrw()入口必须是汉字的Unicode编码才能正确显示,ANSI编码的不能正确显示。这种情况下,只能用adodb.stream的read读取二进制流,readtext读取ANSI字符串(要设置charset属性为GB2312)。
2、国家、地区信息的长度判断。目前只计算了字节长度,显然字节长度>=信息长度,所以可以完整读取信息。不过仍然有待改进。
3、存储模式的判断。Luma的文章给出了四种存储模式。实际调试的时候发现部分信息有乱码,经调试,发现还有两种模式(一共有六种模式,测试过连续几百个IP,没有一个乱码)。所以,99%确定QQWry.dat的编码曾经优化过(纯粹我的胡扯哈~)。
4、搜索索引区。Luma推荐的是二分查找法,我也用了这种方法,效率无疑提高了非常非常多倍。
为了弄这个周末把我家笨笨又抛在一边了,可怜巴巴的我家笨笨为我洗菜做菜陪我说话帮我斗地主,给我温暖胜似太阳N倍。笨笨我非常非常爱你~我也会一如既往一成不变一心一意专心致志至死不渝地陪我家笨笨。
最后还是要感谢QQWry.dat的作者金狐(www.cz88.net)和Luma以及“那唯一一份文档的作者”。