所谓编码转换是将字符文本用一种编码的值表示转换成另一种编码的值表示。编码的转换过程需要用到两种编码的映射表。不过这一个映射过程的转换已经有开源的库libiconv实现了。在编码转换过程其实很简单。难的是:1文本源编码的识别。(这个我们以后再讨论讨论,假设我们已知源编码)2编码不纯粹。文本中某个字符损坏了,如丢了一个字节。或者夹杂了若干别的编码的字符。
具体来说
iconv转换要求从一个正确的开始位置开始转换。iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);如果开始位置不是一个完整字符,如mybuf="我的好朋友" inbuf=mybuf+1转换则会出错。如果开始位置正确但是中途遇到某个字节的杂质,则转换也会停止返回错误退出。剩下的文本就不处理了。但是我们留心ie或者firefox就会发现,虽然某些网页也有文件中含有别的编码字符或者残缺的字节。浏览器会对这个别字节用问号(有的用别的符号)代替。跳过这些字符又显示正确了。但是如Cterm之类的许多其他软件软件,再遇到半个汉字的情况整个文本都会显示乱码或者截断不能显示。这差别是怎么就是由于文本中的杂质导致转换失败或者雪崩错乱(如GBK编码识别连续错位一个字节)。其实是利用字符编码的一些规律。举2个典型例子如下utf8转换倒别的编码的情况。由于utf8 二进制 第一个字节不会以10开头 0xc0; 其它字节都以10开头。a 所以遇到转换失败时候,从转换失败处跳过一个字节,然后连续跳过所有不符合此规则的字节。b 遇到符合要求的字节开始重新用iconf转换。重复以上两个过程即可。转换成代码则是:
while(inbytesleft>0){                while((inbytesleft>0)                        &&(inbuf!=''                        &&(( (unsigned char )inbuf&0xc0)==0x80))                        //0xc0 == 11000000b ; 0x80 == 10000000b                {                           //skip rot                        inbuf++;                        inbytesleft--;                }                   if(inbytesleft<=0 || (inbuf=='') break;                iconv_ret =                      iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);                if(iconv_ret<0){                        inbuf++;                        inbytesleft--;               }iWriteBytes = outbuf - pszLocale;        iconv_close(cd);}                                            GBK转倒别的编码比较麻烦。因为GBK每个字符之间没有明显的边界(UTF8字符第一个字节都不以10开头).所以GBK遇到杂质字节错误终止可能会连续错一小片直到某个条件发生。这个条件也是利用GBK编码的特征。和过程ab不同的是跳过杂质尽快找到一个正确字符开头的条件如下 1if( ((unsigned char )inbuf<0x40)   )//不在GBk编码空间外 必定为ascii 雪崩停止2if( ((unsigned char )(inbuf+1) != '' && (inbytesleft>2)){if(  ( ((unsigned char )inbuf)<0x80 )  && ( (*(unsigned char *)inbuf)>=0x40 ){ // 落在0x80-ox40之前 必定为中文第二个字节 或者 英文,直接取下一个>    字节即可

下午写了一个小的订阅系统。让酷讯到的火车票第一分钟内发到手机。
半个小时写好部署程序,就出门逛街。三个小时内买了四张想要的票。
而两个朋友 从昨天晚上开始到哦傍晚在北京西站排队。

这个就是信息社会。

最容易下手的
书籍推荐和出版商分成
每本书分一折半折
当然不是随便推荐。把数据挖掘做好,根据用户的阅读日志分析,推断用户感兴趣的杂志和数据。
其实开始挺容易做的。简单可以计算相关性即可,接下去可能的分析还可以采用更多的统计方法。
如果书籍推荐的好,我愿意每个月买两三本,这样一个用户每个月就能贡献利润十多元钱。

另外来一些根据阅读兴趣(其实还能推断出用户其它兴趣 和 所处行业)的相关广告。
抓虾将豆瓣打扒

我要是迅雷ceo
我想应该做
1 iptv
2 视频分享
3 skype模式
其中哦1 2 是肯定的。
凭借广大用户,已有的P2SP基础,xunlei.com下载门户,客户端基础。
可以获得
1 上传快优势
2 带宽成本小优势
3 已有资源门户优势
4 已有用户群
5 已有积分
6 速度快优势
7 已有视频资源优势
迅速将 yoqoo 6rooms yijian imop  pplive ppstram等打趴

---
从汇编角度来理解C++面向对象
作者: onebird
发布时间: 2007-02-04 00:51
分类: 技术

自己写的一个很简单的例子,能够帮助清晰理解C++面向对象技术等知识
揭开类 对象 成员变量 成员函数  动态绑定,虚函数的面纱

本文以linux 内联汇编位手段来解释,
最近没装vc,用vc也基本类似(传参方面有些不一样)。

一个论坛上的常见的坑。我是从来不参与这类问题的。不过今天在公司做了技术讲座 使用Boost和STL提高效率。结束的时候有人又提到了这个东西。我不是某项技术的忠实fans。我其实只是想纠正造成这种争论的原因。在Blog里面写上我的所知,让人纠正自己知识的不足或者是纠正别人的不足。1 本文只讨论用户态程序 不讨论内核(linux内核只能用c和汇编)2 凡是有争议的地方用具体事实说话,不要模糊地说 肯定是 不用说。

Plone 中文资料挺少的。
真要做大的改动,需要比较好的python和 css html基础。
xoops 比较傻瓜化,而且资料多挺符合中国人的习惯的。

先放两个简单连手的的。
http://pressrights.onebird.net
http://xoops.onebird.net

2007展望
作者: onebird
发布时间: 2007-01-03 02:06
分类: 生活

1 工作学习。
工程能力和意识再进一步
能好好复习和学习数学。
(其它省略千字)
2 旅游
去一趟西边
去一趟西南边
3 学习 (按原定计划, 省略百字字)

4 生活
搬家两居室,希望两边父母能常来。
将自己计划做的小作品做好。
早睡早起
身体能更好

1 Married
2 到了目前所在的公司。
3 目前所在的公司从5人发展超过50人。
4 从纯研发走向兼带技术管理
5 书买的多看的少了
6 改变计划 ,两人一起京工作,mm去安永。
7 计划要做的事情都刚起了个头,还没找到节奏。
总结
目标不够清晰,节奏不够好,能力提高不大
除了工作之外,学习娱乐未做好,和同学朋友联系很少。
找到一个空间足够大的公司,还有很大的空间促使和发挥提高能力。
更详细的总结,请报告本人及家属以获得。

---
爬虫和浏览器的实现
作者: onebird
发布时间: 2006-12-19 22:25
分类: 互联网

由于众多web2.0网站的出现。
越来越多网站将逻辑用javasciprt 或者 falsh放到客户端。(js更流行)
Tamarin

web技术的发展将浏览器的门槛 大大提高了。从前links w3m 等已经几乎不能使用了。今日发现Elinks文本浏览器据说能支持javascript昨天上水木试验了一下。还是不能用。 而且中文支持不大好。
同时对搜索引擎爬虫的性能 和 实现难度也有个很大的提高。

---
最讨厌的人
作者: onebird
发布时间: 2006-12-14 23:08
分类: 心情

自大的人
忽悠的人
半通水自以为是的人
猥琐的人