雷子

学习的殿堂

Unicode

三月 14th, 2008 by 大雷子
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。随着计算机工作能力的增强,Unicode也在面世以来的十多年里得到普及。
2006年6月的最新版本的 Unicode 是 2005年3月31日推出的Unicode 4.1.0 。另外,5.0 Beta已于2005年12月12日推出,以供各会员评价。

Unicode 的编码和实现
大概来说,Unicode 编码系统可分为编码方式和实现方式两个层次。
1.编码方式
Unicode 的编码方式与 ISO 10646 的通用字元集(亦称[通用字符集])(Universal Character Set,UCS)概念相对应,目前的用于实用的 Unicode 版本对应于 UCS-2,使用16位的编码空间。也就是每个字符占用2个字节。这样理论上一共最多可以表示 65,536(2的16次方) 个字符。基本满足各种语言的使用。实际上目前版本的 Unicode 尚未填充满这16位编码,保留了大量空间作为特殊使用或将来扩展。
上述16位 Unicode 字符构成基本多文种平面(Basic Multilingual Plane, 简称 BMP)。最新(但未实际广泛使用)的 Unicode 版本定义了16个辅助平面,两者合起来至少需要占据21位的编码空间,比3字节略少。但事实上辅助平面字符仍然占用4字节编码空间,与 UCS-4 保持一致。未来版本会扩充到 ISO 10646-1 实现级别3,即涵盖 UCS-4 的所有字符。UCS-4 是一个更大的尚未填充完全的31位字符集,加上恒为0的首位,共需占据32位,即4字节。理论上最多能表示 2,147,483,648(2的31次方)个字符,完全可以涵盖一切语言所用的符号。
BMP 字符的 Unicode 编码表示为 U+hhhh,其中每个 h 代表一个十六进制数位。与 UCS-2 编码完全相同。对应的4字节 UC ... (全文...)

Posted in 学习 | No Comments »

UTF-8编码

三月 14th, 2008 by 大雷子
在所有字符集中,最知名可能要数被称为ASCII的7位字符集了。它是美国信息交换标准委员会(American Standards Committee for Information Interchange)的缩写, 为美国英语通信所设计。它由128个字符组成,包括大小写字母、数字0-9、标点符号、非打印字符(换行符、制表符等4个)以及控制字符(退格、响铃等)组成。
但是,由于他是针对英语设计的,当处理带有音调标号(形如汉语的拼音)的欧洲文字时就会出现问题。因此,创建出了一些包括255个字符的由ASCII扩展的字符集。其中有一种通常被成为IBM字符集,它把值为128-255之间的字符用于画图和画线,以及一些特殊的欧洲字符。另一种8位字符集是ISO 8859-1 Latin 1,也简称为ISO Latin-1。它把位于128-255之间的字符用于拉丁字母表中特殊语言字符的编码,也因此而得名。
欧洲语言不是地球上的唯一语言,因此亚洲和非洲语言并不能被8位字符集所支持。仅汉语(或pictograms)字母表就有80000以上个字符。但是把汉语、日语和越南语的一些相似的字符结合起来,在不同的语言里,使不同的字符代表不同的字,这样只用2个字节就可以编码地球上几乎所有地区的文字。因此,创建了UNICODE编码。它通过增加一个高字节对ISO Latin-1字符集进行扩展,当这些高字节位为0时,低字节就是ISO Latin-1字符。UNICODE支持欧洲、非洲、中东、亚洲(包括统一标准的东亚像形汉字和韩国像形文字)。但是,UNICODE并没有提供对诸如Braille, Cherokee, Ethiopic, Khmer, Mongolian, Hmong, Tai Lu, Tai Mau文字的支持。同时它也不支持如Ahom, Akkadian, Aramaic, Babylonian Cuneiform, Balti, Brahmi, Etruscan, Hittite, Javanese, Numidian, Old Persian Cuneiform, Syrian之类的古老的文字。
事实证明,对可以用ASCII表示的字符使用UNICODE ... (全文...)

Posted in 学习 | No Comments »

ASCII码

三月 14th, 2008 by 大雷子
ASCII码全称是美国标准信息交换码,它是定义一个标准员慵扑慊芨玫氖侗鹦畔ⅰ在ascii中定义为01000001,也就是十进制65,有了这个标准后,当我们输入A时,计算机就可以通过ascii码知道输入的字符的二进制编码是01000001。而没有这样的标准,我们就必须自己想办法告诉计算机我们输入了一个A;没有这样的标准,我们在别的机器上就需要重新编码以告诉计算机我们要输入A。ascii码指的不是十进制,是二进制。只是用十进制表示习惯一点罢了,比如在ascii码中,A的二进制编码为01000001,如果用十进制表示是65,用十六进制表示就是41H。
在ascii码表中,只包括了一些字符、数字、标点符号的信息表示,这主要是因为计算机是美国发明的,在英文下面,我们使用ascii表示就足够了!但是在汉字输入下面,用ascii码就不能表示了,而汉字只是中国的通用表示,所以如果我们要在计算机中输入汉字,就必须有一个像ascii码的标准来表示每一个汉字,这就是中国的汉字国标码,它定义了汉字在计算机中的一个表示标准。通过这个标准,但我们输入汉字的时候,我们的输入码就转换为区位码,通过唯一的区位码得到这个汉字的字形码并显示出来。当然汉字的区位码在计算机中也是用二进制表示的!
回答不全的地方,仅供参考!
二进制数转换为十进制数
二进制数第0位的权值是2的0次方,第1位的权值是2的1次方……
所以,设有一个二进制数:0110 0100,转换为10进制为:
下面是竖式:
0110 0100 换算成 十进制
第0位 0 * 20 = 0
第1位 0 * 21 = 0
第2位 1 * 22 = 4
第3位 0 * 23 = 0
第4位 0 * 24 = 0
第5位 1 * 25 = 32
第6位 1 * 26 = 64
第7位 0 * 27 = 0 +
---------------------------
100
用横式计算 ... (全文...)

Posted in 学习 | No Comments »

数据批量上传数据库

三月 12th, 2008 by 大雷子
                 string constr=ConfigurationManager.AppSettings["constr"];
                //数据批量导入sqlserver,创建实例
                SqlBulkCopy sqlbulk = new SqlBulkCopy(constr);
                //目标数据库表名
                sqlbulk.DestinationTableName = "NewsMain";
                //数据集字段索引与数据库字段索引映射
                sqlbulk.ColumnMappings.Add("title", "title");
                sqlbulk.ColumnMappings.Add("url", "url");              
                //导入
                sqlbulk.WriteToServer(sqldb);
                sqlbulk.Close();
        我简单测试下了,10W条数据只需要2S,1KW,直接内存溢出,说出去真丢人....忘了算占的空间了。

Posted in 学习 | No Comments »

获取和发送cookie

二月 5th, 2008 by 大雷子
1.获取cookie
   声明一个CookieContainer对象
   CookieContainer cc = new CookieContainer()
   将用户名和密码等信息都加到HttpWebRequest中具体如下:  
      byte[] data = encoding.GetBytes(FormData);
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(FormURL);
            request.Method = "POST";    //数据提交方式
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = data.Length;
               //可以加模拟一个UserAgent
            Stream newStream = request.GetRequestStream();
            newStream.Write(data, 0, data.Length);
            newStream.Close();
    然后获得response的Cookies即可
     request.CookieContainer = cc;                   
     HttpWebResponse response = (HttpWebResponse)request.GetResponse();
     cc.Add(response.Cookies);
2.发送cookie
 只要在建立HttpWebRequest带上即可
  request.CookieContainer = cc;//cc是一个CookieContainer
3.用途
  在爬一些需要登陆才能访问的网站的数据时,可以先访问登陆页面,获取返回的cookie,然后将获得的cookie保存,再将cookie带上因为隔着远,没看清楚是什么花。雨滴追逐着雨滴,落在我阳台盆栽的榕树叶上,叶子颤动,枝丫摇晃,但还是支撑不住这重访问需要的数据即可。 ... (全文...)

Posted in 学习 | No Comments »

urlencode

二月 5th, 2008 by 大雷子
前段时间做抓取,遇到中文参数怎么都传过不去,反复测试发现要经过url  encode ,但是忘记了函数名,就研究了下urlencode的实现算法。其实很简单:只要将字符转化为16进制,在前面加上%即可,实现方法(C#):
   public static string UrlEncode(string encodestr)
        {
            StringBuilder sb = new StringBuilder();
            byte[] byencodeStr = System.Text.Encoding.Default.GetBytes(encodestr);
            for(int temp= 0; temp< byencodeStr .Length;temp++)
            {
                sb.Append(@"%" + Convert.ToString(byencodeStr [temp],16));
            }
            
            return (sb.ToString());
            
        }  ... (全文...)

Posted in 学习 | No Comments »

Categories

Archives

链接表

Search

功能: