<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[告诉世界]]></title>
<link>http://www.tellworld.cn/</link>
<description><![CDATA[Fantadust&#39;s blog,幻尘的博客]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[info@tellworld.cn(幻尘)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>告诉世界</title>
	<url>http://www.tellworld.cn/images/logos.gif</url>
	<link>http://www.tellworld.cn/</link>
	<description>告诉世界</description>
</image>

			<item>
			<link>http://www.tellworld.cn/article/experience/110.html</link>
			<title><![CDATA[纯as3项目不能解释java的list的处理办法]]></title>
			<author>info@tellworld.cn(林子)</author>
			<category><![CDATA[工作]]></category>
			<pubDate>Mon,02 May 2011 14:15:02 +0800</pubDate>
			<guid>http://www.tellworld.cn/default.asp?id=110</guid>
		<description><![CDATA[进行转码封包的时候加载 flex.messaging.io.SerializationContext<br/><br/>SerializationContext context = new SerializationContext();<br/><br/>我们只需要在此时进行一次设置即可<br/>context.legacyCollection = true;<br/><br/>通过查询相关文档<br/>legacyCollection <br/><br/>Default value is false. When true, instances of java.util.Collection are returned as ActionScript arrays. When false, instances of java.util.Collection are returned as mx.collections.ArrayCollection.<br/><br/>其意思已明了]]></description>
		</item>
		
			<item>
			<link>http://www.tellworld.cn/article/experience/109.html</link>
			<title><![CDATA[54点提高PHP编程效率 引入缓存机制提升性能]]></title>
			<author>info@tellworld.cn(林子)</author>
			<category><![CDATA[工作]]></category>
			<pubDate>Wed,26 May 2010 18:12:31 +0800</pubDate>
			<guid>http://www.tellworld.cn/default.asp?id=109</guid>
		<description><![CDATA[ 0、用单引号代替双引号来包含字符串，这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量，单引号则不会，注意：只有echo能这么做，它是一种可以把多个字符串当作参数的“函数”（译注：PHP手册中说echo是语言结构，不是真正的函数，故把函数加上了双引号）。<br/>1、如果能将类的方法定义成static，就尽量定义成static，它的速度会提升将近4倍。<br/><br/><br/>2、$row[’id’] 的速度是$row[id]的7倍。<br/><br/><br/>3、echo 比 print 快，并且使用echo的多重参数（译注：指用逗号而不是句点）代替字符串连接，比如echo $str1,$str2。<br/><br/><br/>4、在执行for循环之前确定最大循环数，不要每循环一次都计算最大值，最好运用foreach代替。<br/><br/><br/>5、注销那些不用的变量尤其是大数组，以便释放内存。<br/><br/><br/>6、尽量避免使用__get，__set，__autoload。<br/><br/><br/>7、require_once()代价昂贵。<br/><br/><br/>8、include文件时尽量使用绝对路径，因为它避免了PHP去include_path里查找文件的速度，解析操作系统路径所需的时间会更少。<br/><br/><br/>9、如果你想知道脚本开始执行（译注：即服务器端收到客户端请求）的时刻，使用$_SERVER[‘REQUEST_TIME’]要好于time()。<br/><br/><br/>10、函数代替正则表达式完成相同功能。<br/><br/><br/>11、str_replace函数比preg_replace函数快，但strtr函数的效率是str_replace函数的四倍。<br/><br/><br/>12、如果一个字符串替换函数，可接受数组或字符作为参数，并且参数长度不太长，那么可以考虑额外写一段替换代码，使得每次传递参数是一个字符，而不是只写一行代码接受数组作为查询和替换的参数。<br/><br/><br/>13、使用选择分支语句（译注：即switch case）好于使用多个if，else if语句。<br/><br/><br/>14、用@屏蔽错误消息的做法非常低效，极其低效。<br/><br/><br/>15、打开apache的mod_deflate模块，可以提高网页的浏览速度。<br/><br/><br/>16、数据库连接当使用完毕时应关掉，不要用长连接。<br/><br/><br/>17、错误消息代价昂贵。<br/><br/><br/>18、在方法中递增局部变量，速度是最快的。几乎与在函数中调用局部变量的速度相当。<br/><br/><br/>19、递增一个全局变量要比递增一个局部变量慢2倍。<br/><br/><br/>20、递增一个对象属性（如：$this-&gt;prop++）要比递增一个局部变量慢3倍。<br/><br/><br/>21、递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。<br/><br/><br/>22、仅定义一个局部变量而没在函数中调用它，同样会减慢速度（其程度相当于递增一个局部变量）。PHP大概会检查看是否存在全局变量。<br/><br/><br/>23、方法调用看来与类中定义的方法的数量无关，因为我（在测试方法之前和之后都）添加了10个方法，但性能上没有变化。<br/><br/><br/>24、派生类中的方法运行起来要快于在基类中定义的同样的方法。<br/><br/><br/>25、调用带有一个参数的空函数，其花费的时间相当于执行7至8次的局部变量递增操作。类似的方法调用所花费的时间接近于15次的局部变量递增操作。<br/><br/><br/>26、Apache解析一个PHP脚本的时间要比解析一个静态HTML页面慢2至10倍。尽量多用静态HTML页面，少用脚本。<br/><br/><br/>27、除非脚本可以缓存，否则每次调用时都会重新编译一次。引入一套PHP缓存机制通常可以提升25%至100%的性能，以免除编译开销。<br/><br/><br/>28、尽量做缓存，可使用memcached。memcached是一款高性能的内存对象缓存系统，可用来加速动态Web应用程序，减轻数据库负载。对运算码 (OP code)的缓存很有用，使得脚本不必为每个请求做重新编译。<br/><br/><br/>29、当操作字符串并需要检验其长度是否满足某种要求时，你想当然地会使用strlen()函数。此函数执行起来相当快，因为它不做任何计算，只返回在zval 结构（C的内置数据结构，用于存储PHP变量）中存储的已知字符串长度。但是，由于strlen()是函数，多多少少会有些慢，因为函数调用会经过诸多步骤，如字母小写化（译注：指函数名小写化，PHP不区分函数名大小写）、哈希查找，会跟随被调用的函数一起执行。在某些情况下，你可以使用isset() 技巧加速执行你的代码。<br/><br/><br/>（举例如下）<br/><br/>if (strlen($foo) &lt; 5) { echo “Foo is too short”$$ }<br/><br/>（与下面的技巧做比较）<br/><br/>if (!isset($foo{5})) { echo “Foo is too short”$$ }<br/><br/><br/>调用isset()恰巧比strlen()快，因为与后者不同的是，isset()作为一种语言结构，意味着它的执行不需要函数查找和字母小写化。也就是说，实际上在检验字符串长度的顶层代码中你没有花太多开销。<br/><br/><br/>34、当执行变量$i的递增或递减时，$i++会比++$i慢一些。这种差异是PHP特有的，并不适用于其他语言，所以请不要修改你的C或Java代码并指望它们能立即变快，没用的。++$i更快是因为它只需要3条指令(opcodes)，$i++则需要4条指令。后置递增实际上会产生一个临时变量，这个临时变量随后被递增。而前置递增直接在原值上递增。这是最优化处理的一种，正如Zend的PHP优化器所作的那样。牢记这个优化处理不失为一个好主意，因为并不是所有的指令优化器都会做同样的优化处理，并且存在大量没有装配指令优化器的互联网服务提供商（ISPs）和服务器。<br/><br/><br/>35、并不是事必面向对象(OOP)，面向对象往往开销很大，每个方法和对象调用都会消耗很多内存。<br/><br/><br/>36、并非要用类实现所有的数据结构，数组也很有用。<br/><br/><br/>37、不要把方法细分得过多，仔细想想你真正打算重用的是哪些代码？<br/><br/><br/>38、当你需要时，你总能把代码分解成方法。<br/><br/><br/>39、尽量采用大量的PHP内置函数。<br/><br/><br/>40、如果在代码中存在大量耗时的函数，你可以考虑用C扩展的方式实现它们。<br/><br/><br/>41、评估检验(profile)你的代码。检验器会告诉你，代码的哪些部分消耗了多少时间。Xdebug调试器包含了检验程序，评估检验总体上可以显示出代码的瓶颈。<br/><br/><br/>42、mod_zip可作为Apache模块，用来即时压缩你的数据，并可让数据传输量降低80%。<br/><br/><br/>43、在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情况下，尽量用file_get_contents，因为他的效率高得多！但是要注意file_get_contents在打开一个URL文件时候的PHP版本问题；<br/><br/><br/>44、尽量的少进行文件操作，虽然PHP的文件操作效率也不低的；<br/><br/><br/>45、优化Sel&#101;ct SQL语句，在可能的情况下尽量少的进行Ins&#101;rt、Up&#100;ate操作(在up&#100;ate上，我被恶批过)；<br/><br/><br/>46、尽可能的使用PHP内部函数（但是我却为了找个PHP里面不存在的函数，浪费了本可以写出一个自定义函数的时间，经验问题啊！）；<br/><br/><br/>47、循环内部不要声明变量，尤其是大变量：对象(这好像不只是PHP里面要注意的问题吧？)；<br/><br/><br/>48、多维数组尽量不要循环嵌套赋值；<br/><br/><br/>49、在可以用PHP内部字符串操作函数的情况下，不要用正则表达式；<br/><br/><br/>50、foreach效率更高，尽量用foreach代替while和for循环；<br/><br/><br/>51、用单引号替代双引号引用字符串；<br/><br/><br/>52、“用i+=1代替i=i+1。符合c/c++的习惯，效率还高”；<br/><br/><br/>53、对global变量，应该用完就unset()掉；<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.tellworld.cn/article/Collection/108.html</link>
			<title><![CDATA[人生要小心处理的50件事]]></title>
			<author>info@tellworld.cn(林子)</author>
			<category><![CDATA[收藏]]></category>
			<pubDate>Wed,26 May 2010 18:01:52 +0800</pubDate>
			<guid>http://www.tellworld.cn/default.asp?id=108</guid>
		<description><![CDATA[1．被人羞辱——翻脸不如翻身，生气不如争气<br/>2．面对反对意见——听，并且思考<br/>3．犯错——年少轻狂未足奇，知错能改真俊杰<br/>4．烦恼之事——心事不能随便说<br/>5．谣言——不能置之不理，也不能纠缠下去<br/>6．别人的脸色——不必太在意，做自己该做的事<br/>7．坐冷板凳——做人要拿得起，放得下<br/>8．横财——君子爱财，取之有道<br/>9．入行——男怕入错行，女怕嫁错郎<br/>10．交友——朋友可“多”但勿“滥” <br/>11．办事托熟人——朋友多是快刀手<br/>12．求职被人拒绝——从低处做起用能力证明自己<br/>13．要求加薪——问问自己底气足不足<br/>14．跳槽——“跳”还是“不跳”，三思而后行<br/>15．发现别人的隐私——把别人的私事当成过眼烟云<br/>16．与人争论——逞一时口舌之快不算赢<br/>17．出现小矛盾——让三分心平气和，退一步海阔天空 <br/>18．被人误解——自己心安，天地自宽<br/>19．拒绝别人——勇于说“不”，该出“口”时要出“口”<br/>20．遭遇小人——小心防范，保持适度距离<br/>21．争名夺利——莫为名利遮望眼 <br/>22．回头草吃不吃——好“马”要吃回头草，能屈能伸大丈夫<br/>23．劝架——学会打圆场，息事宁人得人心<br/>24．说话得罪人——管住自己的嘴巴<br/>25．批评别人——委婉一点，含蓄一点，巧妙一点<br/>26．揭短——打人不打脸，揭人别揭短<br/>27．“变脸”——是一种技巧，也是一种必需<br/>28．生意竞争——好处不要自己占绝，要分他人一杯羹<br/>29．面对自己讨厌的人——学会与不喜欢的人共处<br/>30．抱怨——把不满挂在嘴上的人最容易吃亏<br/>31．仇恨——冤冤相报何时了，有仇不报亦君子<br/>31．别人犯错——以宽人之心宽己，以恕己之心恕人<br/>33．吃亏——吃亏有时就是占便宜<br/>34．得礼让人——以德报怨是最佳人情投资<br/>35．人在屋檐下——该低头时得低头<br/>36．人生的十字路口——无怨无悔我走我路<br/>37．求人——善借他人之力，该求人时还得求<br/>38．嘲笑——当成认识缺点、改正缺点的机会<br/>39．失意——看庭前花开花落，望天外云卷云舒<br/>40．面对别人的失意——切不可言己之得意事<br/>41．挫折——跌言起伏的人生才能创造伟绩<br/>42．被人轻视——用行动，而不是用嘴巴证明自己<br/>43．遭遇不公——适应必须适应的，改变能够改变的<br/>44．怀才不遇——努力打磨自己，是金子总会发光的<br/>45．外遇——生命中不能承受之重，婚姻中不能承受之痛<br/>46．分手——好聚还要好散<br/>47．婚前财产公证——爱情到底用什么来衡量<br/>48．试婚——慎重试行<br/>49．夫凄吵架——吵架伤神，没有必要争个你输我赢<br/>50．嫉妒——葬送爱情和幸福的最烈“毒药 <br/>]]></description>
		</item>
		
			<item>
			<link>http://www.tellworld.cn/article/Emotional/what.html</link>
			<title><![CDATA[我该怎么办]]></title>
			<author>info@tellworld.cn(林子)</author>
			<category><![CDATA[情感]]></category>
			<pubDate>Tue,15 Dec 2009 23:01:31 +0800</pubDate>
			<guid>http://www.tellworld.cn/default.asp?id=107</guid>
		<description><![CDATA[感觉自己象是着魔了一样<br/>有时候自己都觉得不可思议<br/>努力控制自己的思想<br/>感觉自己真的是即拿不起,也放不下<br/><br/>哎.我该怎么办<br/>顺其自然,怎么个自然法<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.tellworld.cn/article/Emotional/love.html</link>
			<title><![CDATA[真正爱一个人]]></title>
			<author>info@tellworld.cn(林子)</author>
			<category><![CDATA[情感]]></category>
			<pubDate>Mon,14 Dec 2009 23:54:29 +0800</pubDate>
			<guid>http://www.tellworld.cn/default.asp?id=106</guid>
		<description><![CDATA[真正爱一个人<br/>就千万不要去进入他的生命<br/>不能干扰对方<br/>也不能让对方因爱的痴念而困惑<br/>这真正爱一个人<br/>就应该让对方自由<br/>去成全对方<br/>让他永远不受束缚<br/>全无牵挂地去达成理想<br/>受真理的影响<br/>去完成他自己的使命<br/>真正爱一个人<br/>就要放手]]></description>
		</item>
		
			<item>
			<link>http://www.tellworld.cn/article/Emotional/fan.html</link>
			<title><![CDATA[最近比较烦]]></title>
			<author>info@tellworld.cn(林子)</author>
			<category><![CDATA[情感]]></category>
			<pubDate>Tue,01 Dec 2009 21:17:40 +0800</pubDate>
			<guid>http://www.tellworld.cn/default.asp?id=105</guid>
		<description><![CDATA[最近比较烦<br/>好多事,可不知该写点什么<br/>迷失中.....]]></description>
		</item>
		
			<item>
			<link>http://www.tellworld.cn/article/Collection/104.html</link>
			<title><![CDATA[80后女生写给未来儿子的一封信~~~太牛B了，不服不行！！！]]></title>
			<author>info@tellworld.cn(林子)</author>
			<category><![CDATA[收藏]]></category>
			<pubDate>Sat,28 Mar 2009 13:54:22 +0800</pubDate>
			<guid>http://www.tellworld.cn/default.asp?id=104</guid>
		<description><![CDATA[<span style="color:#0000ff">乖儿子（如果是闺女 千万别跟妈计较 因为打儿子俩字只敲四下键盘）: <br/>你好 我是你妈 你亲妈 你风华绝代，婀娜多姿的亲妈 <br/>恩 看到这封信的时候 <br/>你一定很好奇妈是什么时候写的 <br/>非常牛掰地告诉你 <br/>是你妈二十岁那年写的 那会儿连你爹都没有 <br/>就是突然兴致来潮了 决定现在写下一些话和承诺 <br/>可能你读完会想说 妈赐我毒药 让我离开人世吧 <br/>首先我必须说 其实你有可能差点就不出现在这世上 <br/>因为你妈我曾经从想要俩孩子 <br/>到只想要一个孩子 <br/>到后来见着孩子就恶心 <br/>但是遇见你爸 你妈就倒塌了 <br/>然后你也知道 男女一相爱 就为所欲为 <br/>于是在一个非常美好的日子 我和你爸就昏天暗地了 <br/>因为爱你爸 因为你妈觉得女人没有孩子很不完整 <br/>所以就把你给弄出来了 <br/>为了你 娘抛弃了性感小裙 <br/>为了你 妈忽视了高跟鞋 <br/>为了你 母后放弃了一切被定义为垃圾的食物 <br/>为了你 额娘想没事爱爱你爸都提心吊胆 <br/>你说一正值娇媚无比的女人突然这样容易吗 <br/>还有你爹容易吗 <br/>首先视觉上就得进行调整 <br/>其次心理上要准备承担更多累人的事 <br/>再就是生理上要忍辱负重 <br/>所以为了你 我和你爸没少受苦 一点都不容易 <br/>以后别觉得我们活该对你好 <br/>以后别觉得一切拥有都是理所当然 <br/>以后我们爱你十分 你得爱我们五分 剩下的五分就看你小子良心了 <br/>看见你就会让我想起和你爸相爱的点点滴滴 <br/>看见你就会让我想起你姥姥和你姥爷那时的不容易 <br/>看见你就会让我想起你妈小时候也跟你似的那么可爱 <br/>对于你的爱好 妈有点稍微自私就是想让你去学钢琴 <br/>你妈我学了七八年钢琴也没弄个什么肖邦啊贝多芬奖的 <br/>那是因为你姥姥只是想让我有个兴趣 <br/>而我纯粹是为了让你以后勾搭小姑娘更加方便点 <br/>有那么一部分丫头看见长的不错还会弹钢琴的男的就发昏 <br/>当然如果你誓死不学 也不逼你 最多不理你几天 <br/>还有妈希望你能爱运动 篮球足球网球各种球随你乐意 <br/>学生时期运动型男生很招风 我希望你是校园风云人物 <br/>迷倒一片女人 让她们来贿赂我 告儿她们带酸奶 <br/>这样没事儿你爸还能跟你在楼下篮球场斗两下 <br/>当然我经过的时候 你必须把球传给你爸 <br/>这样我就可以抱着你爸说 老公 你真帅 <br/>你爸一个反扑 媳妇儿 走 回家 <br/>妈希望你能爱学习 但不是书呆子 <br/>千万别跟我说 妈我只爱学习 我只想看书 <br/>我可能一激动会掐死你 <br/>不用非得什么第一第二年级前五十 差不多就行 <br/>这个东西要看你自己 <br/>只要你觉得不亏 只要你觉得这就是你的能力了 <br/>恋爱这个问题 妈的建议就是 <br/>如果觉得责任是你能承担的 那么你爱怎么折腾都随便 <br/>只是我要告诉你 每个女孩都值得被珍惜 <br/>不要随随便便地玩弄任何一个人的感情 <br/>请记住保险套随身携带 <br/>再就是如果你恰巧爱上了同性 请你告儿妈一声 <br/>如果那个人是你真正爱的人 我和你爸都不会阻止 <br/>对于朋友 请你记住哥们是陪伴你最久的一群人 <br/>可能在你还年少的时候交了所谓的坏朋友 <br/>但是记住这世上没有绝对的好坏 任何一个人都有值得你学习的地方 <br/>作为男人 担当 责任 仁义这些请你记住 <br/>妈宁愿要一个为了哥们去炮儿局的儿子 <br/>也不想要个冷血无情只为自己的尊贵人物 <br/>不过你丫要是折了 真跑进去蹲着了 <br/>我抽死你这事没商量 <br/>希望你是个真男人 是个有血性的真爷们 <br/>不是阴柔男子 那都是放屁 <br/>关于你的前程 爹妈不会强求你 <br/>希望你能去做你真正想做的事儿 <br/>如果你想拎包走遍世界 好的 去吧 <br/>每个年轻的血液都有着那些冲动 <br/>年长的人会称之为盲目 <br/>但我不希望 <br/>等你老的时候后悔年轻时有那么多没做过的事情 <br/>只要不是坑蒙拐骗偷吃喝嫖赌抽 <br/>有人说人生最邪恶的地方是只能年轻一次 <br/>可这也恰巧是人生中最美好的地方 <br/>只有这样才能让我们学会珍视和坚持 <br/>我和你爸不需要你养活 让你拥有自己的事业 <br/>是为了让你可以承担自己的家庭 <br/>对了 说到这 就要提一个很严肃的问题 <br/>那就是你结婚了 千万别跟我和你爸住一起 <br/>求你了 就让我们和谐的渡过人生吧 <br/>你要是有小孩了 也千万别扔给我们 <br/>每个星期带过来让我们俩玩两天 <br/>我和你爸可能没事就出去旅游了 哪玩儿去了 <br/>总之让俩老头老太太多腻歪腻歪吧 <br/>对于感情妈妈要告诉你 <br/>记住只靠单纯的喜欢和爱 那份感情不会长久 <br/>信任 沟通和宽容才是最重要的 <br/>人不难懂的 只要你主动去沟通 试着换位思考 <br/>请你信任你的爱人 不要怀疑 <br/>请你尊重你的爱人 不要认为对方理所当然就应该对你好 <br/>千万不要总自以为是的去考验对方 <br/>千万不要认为对方一定懂你 因为谁都不是天王老子 生下来就什么都懂 <br/>关于生活 这是一个很妙不可言的话题 <br/>每个人的生活方式不一样 <br/>但都遵循着一个准则 那就是良心 <br/>请你活的潇洒些 请你活的对得起自己 <br/>别大学毕业了跟我说 妈 我没拿着英语四级 <br/>你爱拿不拿 只要学校给你毕业证 <br/>哎呦 <br/>就是记住你妈爱喝酸奶 你挣钱了必须得给买酸奶 但绝不要芦荟味儿的 <br/>就是记住你爸爱你妈 别没事傻了吧唧跟你爸统一战线跟我起义 因为你铁输 <br/>就是记住我爱你 非常地爱你 从你出现在我生命里那一刻开始 <br/>还得记住以后逛街的时候得让我挽着 还得喊我姐 听见没 <br/>至于你老婆 带回来给我和你爸瞧瞧 <br/>大概的理想儿媳妇标准就是五官俱在 四肢健全 心智正常 <br/>但你敢给我领回一非主流的儿媳妇 我能踢死你 <br/>别怪妈不开通 因为你妈不想看见一山寨版熊猫在眼前晃悠 <br/>不说了 累了 还有点饿了 你是不是看哭了 别哭 <br/>你妈爱感动人这事不是一年两年了 <br/>因为心里有你 才想那么无怨无悔地爱你 宠你 感动你 对你好 <br/>千万别总出去说我是你妈 我怕那些孩子因为太羡慕而挠你 <br/>曾在随笔本上随手写下了一句话 <br/>爸 妈 是我人生最大的弱点 若他们离去 我的世界会瞬间崩塌 <br/>后来下面被你姥姥补了一句话 <br/>孩子 等到你为人父母那天 你的世界就是你的孩子 <br/>若他们离去 你的世界会瞬间崩塌 <br/>大宝贝儿子 我爱你 <br/>我还至死不渝地爱你爸 <br/>我还以命担当地爱你姥姥姥爷爷爷奶奶 <br/>我还坚贞不渝地爱中华人民共和国 <br/>世界和平 阿门 真主安拉保佑 阿弥陀佛 <br/>你温柔可爱娇媚性感活泼动人勇敢美丽又勤劳地亲妈 亲书 <br/>时间日期 自己查去吧 </span>]]></description>
		</item>
		
			<item>
			<link>http://www.tellworld.cn/article/information/103.html</link>
			<title><![CDATA[Five First Public Drafts of Web Services Specifica]]></title>
			<author>info@tellworld.cn(林子)</author>
			<category><![CDATA[资料]]></category>
			<pubDate>Wed,25 Mar 2009 17:32:56 +0800</pubDate>
			<guid>http://www.tellworld.cn/default.asp?id=103</guid>
		<description><![CDATA[The Web Services Resource Access Working Group published five First Public Working Drafts: Web Services Enumeration (WS-Enumeration), Web Services Eventing (WS-Eventing), Web Services Resource Transfer (WS-RT), Web Services Transfer (WS-Transfer), and Web Services Metadata Exchange (WS-MetadataExchange). The first describes a general SOAP-based protocol for enumerating a sequence of XML elements that is suitable for traversing logs, message queues, o&#114; other linear information models. The second describes a protocol that allows Web services to subscribe to o&#114; accept subscriptions for event notification. The third defines extensions to WS-Transfer that deal primarily with fragment-based access to resources to satisfy the common requirements of WS-ResourceFramework and WS-Management. The fourth describes a general SOAP-based protocol for accessing XML representations of Web service-based resources. The fifth defines how metadata associated with a Web service endpoint can be represented as resources, how metadata can be embedded in endpoint references, and how metadata could be retrieved from a Web service endpoint. Learn more about the Web Services Activity. (Permalink)]]></description>
		</item>
		
			<item>
			<link>http://www.tellworld.cn/article/information/102.html</link>
			<title><![CDATA[在PHP里面运用与Perl兼容地正则表达式]]></title>
			<author>info@tellworld.cn(林子)</author>
			<category><![CDATA[资料]]></category>
			<pubDate>Wed,25 Mar 2009 17:30:37 +0800</pubDate>
			<guid>http://www.tellworld.cn/default.asp?id=102</guid>
		<description><![CDATA[1 前言 <br/>PHP被大量的应用于Web的后台CGI开发，通常是在用户数据数据之后得出某种结果，但是如果用户输入的数据不正确，就会出现问题，比如说某人的生日是&#34;2月30日&#34;！那应该怎么样来检验暑假是否正确呢？ 在PHP中加入了正则表达式的支持，让我们可以十分方便的进行数据匹配。 <br/> <br/><br/><br/>2 什么是正则表达式： <br/>简单的说，正则表达式是一种可以用于模式匹配和替换的强大工具。在几乎所有的基于UNIX/LINUX系统的软件工具中找到正则表达式的痕迹，例如：Perl或PHP脚本语言。此外，javascript这种客户端的脚本语言也提供了对正则表达式的支持，现在正则表达式已经成为了一个通用的概念和工具，被各类技术人员所广泛使用。 <br/>在某个Linux网站上面有这样的话：&#34;如果你问一下Linux爱好者最喜欢什么，他可能会回答正则表达式；如果你问他最害怕什么，除了繁琐的安装配置外他肯定会说正则表达式。&#34; <br/>正如上面说的，正则表达式看起来非常复杂，让人害怕，大多数的PHP初学者都会跳过这里，继续下面的学习，但是PHP中的正则表达式有着可以利用模式匹配找到符合条件的字符串、判断字符串是否合乎条件或者用指定的字符串来替代符合条件的字符串等强大的功能，不学实在太可惜了…… <br/><br/><br/>3 正则表达式的基本语法： <br/>一个正则表达式，分为三个部分：分隔符，表达式和修饰符。 <br/>分隔符可以是除了特殊字符以外的任何字符（比如&#34;/ !&#34;等等），常用的分隔符是&#34;/&#34;。表达式由一些特殊字符（特殊字符详见下面）和非特殊的字符串组成，比如&#34;[a-z0-9_-]+@[a- z0-9_-.]+&#34;可以匹配一个简单的电子邮件字符串。修饰符是用来开启或者关闭某种功能/模式。下面就是一个完整的正则表达式的例子： <br/>/hello.+?hello/is <br/>上面的正则表达式&#34;/&#34;就是分隔符，两个&#34;/&#34;之间的就是表达式，第二个&#34;/&#34;后面的字符串&#34;is&#34;就是修饰符。 <br/>在表达式中如果含有分隔符，那么就需要使用转义符号&#34;\&#34;，比如&#34;/hello.+?\/hello/is&#34;。转义符号除了用于分隔符外还可以执行特殊字符，全部由字母构成的特殊字符都需要&#34;\&#34;来转义，比如&#34;\d&#34;代表全体数字。 <br/><br/><br/>4 正则表达式的特殊字符： <br/>正则表达式中的特殊字符分为元字符、定位字符等等。 <br/>元字符是正则表达式中一类有特殊意义的字符，用来描述其前导字符（即元字符前面的字符）在被匹配的对象中出现的方式。元字符本身是一个个单一的字符，但是不同或者相同的元字符组合起来可以构成大的元字符。 <br/>元字符： <br/>大括号：大括号用来精确指定匹配元字符出现的次数，例如&#34;/pre{1,5}/&#34;表示匹配的对象可以是&#34;pre&#34;、&#34;pree&#34;、&#34;preeeee&#34;这样在&#34;pr&#34;后面出现1个到5个&#34;e&#34;的字符串。或者&#34;/pre{,5}/&#34;代表pre出现0此到5次之间。 <br/>加号：&#34;+&#34;字符用来匹配元字符前的字符出现一次或者多次。例如&#34;/ac+/&#34;表示被匹配的对象可以是&#34;act&#34;、&#34;account&#34;、&#34;acccc&#34;等在&#34;a&#34;后面出现一个或者多个&#34;c&#34;的字符串。&#34;+&#34;相当于&#34;{1,}&#34;。 <br/>星号：&#34;*&#34;字符用来匹配元字符前的字符出现零次或者多次。例如&#34;/ac*/&#34;表示被匹配的对象可以是&#34;app&#34;、&#34;acp&#34;、&#34;accp&#34;等在&#34;a&#34;后面出现零个或者多个&#34;c&#34;的字符串。&#34;*&#34;相当于&#34;{0,}&#34;。 <br/>问号：&#34;?&#34;字符用来匹配元字符前的字符出现零次或者1次。例如&#34;/ac?/&#34;表示匹配的对象可以是&#34;a&#34;、&#34;acp&#34;、&#34;acwp&#34;这样在&#34;a&#34;后面出现零个或者1个&#34;c&#34;的字符串。&#34;?&#34;在正则表达式中还有一个非常重要的作用，即&#34;贪婪模式&#34;。 <br/><br/>还有两个很重要的特殊字符就是&#34;[ ]&#34;。他们可以匹配&#34;[]&#34;之中出现过的字符，比如&#34;/[az]/&#34;可以匹配单个字符&#34;a&#34;或者&#34;z&#34;；如果把上面的表达式改成这样&#34;/[a-z]/&#34;，就可以匹配任何单个小写字母，比如&#34;a&#34;、&#34;b&#34;等等。 <br/>如果在&#34;[]&#34;中出现了&#34;^&#34;，代表本表达式不匹配&#34;[]&#34;内出现的字符，比如&#34;/[^a-z]/&#34;不匹配任何小写字母！并且正则表达式给出了几种&#34;[]&#34;的默认值： <br/>[:alpha:]：匹配任何字母 <br/>[:alnum:]：匹配任何字母和数字 <br/>[:digit:]：匹配任何数字 <br/>[:space:]：匹配空格符 <br/>[:upper:]：匹配任何大写字母 <br/>[:lower:]：匹配任何小写字母 <br/>[:punct:]：匹配任何标点符号 <br/>[:xdigit:]：匹配任何16进制数字 <br/><br/>另外下面这些特殊字符在转义符号&#34;\&#34;转义后代表的含义如下： <br/>s：匹配单个的空格符 <br/>S：用于匹配除单个空格符之外的所有字符。 <br/>d：用于匹配从0到9的数字，相当于&#34;/[0-9]/&#34;。 <br/>w：用于匹配字母，数字或下划线字符，相当于&#34;/[a-zA-Z0-9_]/&#34;。 <br/>W：用于匹配所有与w不匹配的字符，相当于&#34;/[^a-zA-Z0-9_]/&#34;。 <br/>D：用于匹配任何非10进制的数字字符。 <br/>.：用于匹配除换行符之外的所有字符，如果经过修饰符&#34;s&#34;的修饰，&#34;.&#34;可以代表任意字符。 <br/><br/>利用上面的特殊字符可以很方便的表达一些比较繁琐的模式匹配。例如&#34;/\d0000/&#34;利用上面的正则表达式可以匹配万以上，十万一下的整数字符串。 <br/><br/>定位字符： <br/>定位字符是正则表达式中又一类非常重要的字符，它的主要作用是用于对字符在匹配对象中的位置进行描述。 <br/>^：表示匹配的模式出现在匹配对象的开头（和在&#34;[]&#34;里面不同） <br/>$：表示匹配的模式出现在匹配对象的末尾 <br/>空格：表示匹配的模式出现在开始和结尾的两个边界之一 <br/>&#34;/^he/&#34;：可以匹配以&#34;he&#34;字符开头的字符串，比如hello、height等等； <br/>&#34;/he$/&#34;：可以匹配以&#34;he&#34;字符结尾的字符串即she等； <br/>&#34;/ he/&#34;：空格开头，和^的作用一样，匹配以he开头的字符串； <br/>&#34;/he /&#34;：空格结束，和$的作用一样，匹配以he结尾的字符串； <br/>&#34;/^he$/&#34;：表示只和字符串&#34;he&#34;匹配。 <br/><br/>括号： <br/>正则表达式除了可以用户匹配，还可以用括号&#34;()&#34;来记录需要的信息，储存起来，给后面的表达式读取。比如： <br/>/^([a-zA-Z0-9_-]+)@([a-zA-Z0-9_-]+)(.[a-zA-Z0-9_-])$/ <br/>就是记录邮件地址的用户名，和邮件地址的服务器地址（形式为username@server.com之类的），在后面如果想要读取记录下来的字符串，只是需要用&#34;转义符＋记录的次序&#34;来读取。比如&#34;\1&#34;就相当于第一个&#34;[a-zA-Z0-9_-]+&#34;，&#34;\2&#34;相当于第二个([a-zA- Z0-9_-]+)，&#34;\3&#34;就是第三个(.[a-zA-Z0-9_-])。但是在PHP中，&#34;\&#34;是一个特殊的字符，需要转义，所以&#34;&#34;到了PHP的表达式中就应该写成&#34;\\1&#34;。 <br/>其他特殊符号： <br/>&#34;|&#34;：或符号&#34;|&#34;和PHP里面的或一样，不过是一个&#34;|&#34;，而不是PHP的两个&#34;||&#34;！意思就是可以是某个字符或者另一个字符串，比如&#34;/abcd|dcba/&#34;可能匹配&#34;abcd&#34;或者&#34;dcba&#34;。 <br/><br/><br/>5 贪婪模式： <br/>前面在元字符中提到过&#34;?&#34;还有一个重要的作用，即&#34;贪婪模式&#34;，什么是&#34;贪婪模式&#34;呢？ <br/>比如我们要匹配以字母&#34;a&#34;开头字母&#34;b&#34;结尾的字符串，但是需要匹配的字符串在&#34;a&#34;后面含有很多个&#34;b&#34;，比如&#34;a bbbbbbbbbbbbbbbbb&#34;，那正则表达式是会匹配第一个&#34;b&#34;还是最后一个&#34;b&#34;呢？如果你使用了贪婪模式，那么会匹配到最后一个&#34;b&#34;，反之只是匹配到第一个&#34;b&#34;。 <br/>使用贪婪模式的表达式如下： <br/>/a.+?b/ <br/>/a.+b/U <br/>不使用贪婪模式的如下： <br/>/a.+b/ <br/>上面使用了一个修饰符U，详见下面的部分。 <br/><br/><br/>6 修饰符： <br/>在正则表达式里面的修饰符可以改变正则的很多特性，使得正则表达式更加适合你的需要（注意：修饰符对于大小写是敏感的，这意味着&#34;e&#34;并不等于&#34;E&#34;）。正则表达式里面的修饰符如下： <br/>i ：如果在修饰符中加上&#34;i&#34;，则正则将会取消大小写敏感性，即&#34;a&#34;和&#34;A&#34; 是一样的。 <br/>m：默认的正则开始&#34;^&#34;和结束&#34;$&#34;只是对于正则字符串如果在修饰符中加上&#34;m&#34;，那么开始和结束将会指字符串的每一行：每一行的开头就是&#34;^&#34;，结尾就是&#34;$&#34;。 <br/>s：如果在修饰符中加入&#34;s&#34;，那么默认的&#34;.&#34;代表除了换行符以外的任何字符将会变成任意字符，也就是包括换行符！ <br/>x：如果加上该修饰符，表达式中的空白字符将会被忽略，除非它已经被转义。 <br/>e：本修饰符仅仅对于replacement有用，代表在replacement中作为PHP代码。 <br/>A：如果使用这个修饰符，那么表达式必须是匹配的字符串中的开头部分。比如说&#34;/a/A&#34;匹配&#34;abcd&#34;。 <br/>E：与&#34;m&#34;相反，如果使用这个修饰符，那么&#34;$&#34;将匹配绝对字符串的结尾，而不是换行符前面，默认就打开了这个模式。 <br/>U：和问号的作用差不多，用于设置&#34;贪婪模式&#34;。 <br/><br/><br/>7 PCRE相关的正则表达式函数： <br/>PHP的Perl兼容正则表达式提供的多个函数，分为模式匹配，替换和匹配数目等等： <br/>1、preg_match ： <br/>函数格式：int preg_match(string pattern, string subject, array [matches]); <br/>这个函数会在string中使用pattern表达式来匹配，如果给定了[regs]，就会将string记录到[regs][0]中， [regs][1]代表使用括号&#34;（）&#34;记录下来的第一个字符串，[regs][2]代表记录下来的第二个字符串，以此类推。preg如果在string 中找到了匹配的pattern，就会返回&#34;true&#34;，否则返回&#34;false&#34;。 <br/><br/>2、preg_replace ： <br/>函数格式：mixed preg_replace(mixed pattern, mixed replacement, mixed subject); <br/>这个函数会使用将string中符合表达式pattern的字符串全部替换为表达式replacement。如果replacement中需要包含pattern的部分字符，则可以使用&#34;()&#34;来记录，在replacement中只是需要用&#34;\1&#34;来读取。 <br/><br/>3、preg_split ： <br/>函数格式：array preg_split(string pattern, string subject, int [limit]); <br/>这个函数和函数split一样，区别仅在与split可以使用简单正则表达式来分割匹配的字符串，而preg_split使用完全的Perl兼容正则表达式。第三个参数limit代表允许返回多少个符合条件的值。 <br/><br/>4、preg_grep ： <br/>函数格式：array preg_grep(string patern , array input); <br/>这个函数和preg_match功能基本上，不过preg_grep可以将给定的数组input中的所有元素匹配，返回一个新的数组。 <br/><br/>下面举一个例子，比如我们要检查Email地址的格式是否正确： <br/><br/><br/>&lt;?PHP <br/>function emailIsRight($email) { <br/>if (preg_match(&#34;^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$&#34;,$email)) { <br/>return 1; <br/>} <br/>return 0; <br/>} <br/>if(emailIsRight(&#39;y10k@963.net&#39;)) echo &#39;正确&lt;br&gt;&#39;; <br/>if(!emailIsRight(&#39;y10k@fffff&#39;)) echo &#39;不正确&lt;br&gt;&#39;; <br/>?&gt; <br/><br/><br/>上面的程序会输出&#34;正确&lt;br&gt;不正确&#34;。 <br/><br/>8.PHP中的Perl兼容正则表达式和Perl/Ereg正则表达式的区别： <br/>虽然叫做“Perl兼容正则表达式”，但是和Perl的正则表达式相比，PHP的还是由一些不同，比如修饰符“G”在Perl里面代表全部匹配，但是在PHP中没有加入对这个修饰符的支持。 <br/>还有就是和ereg系列函数的区别，ereg也是PHP中提供的正则表达式函数，不过和preg相比，要弱上很多。 <br/><br/>1、ereg里面是不需要也不能使用分隔符和修饰符的，所以ereg的功能比preg要弱上不少。 <br/>2、关于&#34;.&#34;：点在正则里面一般是除了换行符以外的全部字符，但是在ereg里面的&#34;.&#34;是任意字符，即包括换行符！如果在preg里面希望&#34;.&#34;能够包括换行符，可以在修饰符中加上&#34;s&#34;。 <br/>3、ereg默认使用贪婪模式，并且不能修改，这个给很多替换和匹配带来麻烦。 <br/>4、速度：这个或许是很多人关心的问题，会不会preg功能强大是以速度来换取的？不用担心，preg的速度要远远比ereg快，笔者做了一个程序测试： <br/><br/>time test: <br/><br/>PHP代码: <br/><br/>&lt;?PHP <br/>echo &#34;Preg_replace used time:&#34;; <br/>$start = time(); <br/>for($i=1;$i&lt;=100000;$i++) { <br/>$str = &#34;ssssssssssssssssssssssssssss&#34;; <br/>preg_replace(&#34;/s/&#34;,&#34;&#34;,$str); <br/>} <br/>$ended = time()-$start; <br/>echo $ended; <br/>echo &#34; <br/>ereg_replace used time:&#34;; <br/>$start = time(); <br/>for($i=1;$i&lt;=100000;$i++) { <br/>$str = &#34;ssssssssssssssssssssssssssss&#34;; <br/>ereg_replace(&#34;s&#34;,&#34;&#34;,$str); <br/>} <br/>$ended = time()-$start; <br/>echo $ended; <br/>echo &#34; <br/>str_replace used time:&#34;; <br/>$start = time(); <br/>for($i=1;$i&lt;=100000;$i++) { <br/>$str = &#34;sssssssssssssssssssssssssssss&#34;; <br/>str_replace(&#34;s&#34;,&#34;&#34;,$str); <br/>} <br/>$ended = time()-$start; <br/>echo $ended; <br/>?&gt; <br/>结果： <br/>Preg_replace used time:5 <br/>ereg_replace used time:15 <br/>str_replace used time:2 <br/><br/>str_replace因为不需要匹配所以速度非常快，而preg_replace的速度比ereg_replace要快上不少。 <br/><br/><br/>9.关于PHP3.0对于preg的支持： <br/>在PHP 4.0中默认加入了preg支持，但是在3.0中确没有。如果在3.0中希望使用preg函数，必须加载PHP3_pcre.dll文件，只要在 PHP.ini的extension部分设置加入&#34;extension = PHP3_pcre.dll&#34;然后从新启动PHP就可以了！ <br/>其实正则表达式还常用于UbbCode的实现，很多PHP论坛都使用了这个方法（比如zForum zPHP.com或者vB vbullent.com），但是具体的代码比较长。 ]]></description>
		</item>
		
			<item>
			<link>http://www.tellworld.cn/article/information/101.html</link>
			<title><![CDATA[字符编码详解及由来(UNICODE,UTF-8,GBK)[转帖]]]></title>
			<author>info@tellworld.cn(林子)</author>
			<category><![CDATA[资料]]></category>
			<pubDate>Wed,25 Mar 2009 17:23:26 +0800</pubDate>
			<guid>http://www.tellworld.cn/default.asp?id=101</guid>
		<description><![CDATA[ 一直对字符的各种编码方式懵懵懂懂，什么ANSI、UNICODE、UTF-8、GB2312、GBK、DBCS、UCS……是不是看的很晕，假如您细细的阅读本文你一定可以清晰的理解他们。Let&#39;s go!<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;很久很久以前，有一群人，他们决定用8个可以开合的晶体管来组合成不同的状态，以表示世界上的万物。他们看到8个开关状态是好的，于是他们把这称为&#34;字节&#34;。 <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;再后来，他们又做了一些可以处理这些字节的机器，机器开动了，可以用字节来组合出很多状态，状态开始变来变去。他们看到这样是好的，于是它们就这机器称为&#34;计算机&#34;。<br/>&nbsp;&nbsp;&nbsp;&nbsp;开始计算机只在美国用。八位的字节一共可以组合出256(2的8次方)种不同的状态。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;他们把其中的编号从0开始的32种状态分别规定了特殊的用途，一但终端、打印机遇上约定好的这些字节被传过来时，就要做一些约定的动作。遇上00x10, 终端就换行，遇上0x07, 终端就向人们嘟嘟叫，例如遇上0x1b, 打印机就打印反白的字，或者终端就用彩色显示字母。他们看到这样很好，于是就把这些0x20以下的字节状态称为&#34;控制码&#34;。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;他们又把所有的空格、标点符号、数字、大小写字母分别用连续的字节状态表示，一直编到了第127号，这样计算机就可以用不同字节来存储英语的文字了。大家看到这样，都感觉很好，于是大家都把这个方案叫做 ANSI 的&#34;Ascii&#34;编码（American Standard Code for Information Interchange，美国信息互换标准代码）。当时世界上所有的计算机都用同样的ASCII方案来保存英文文字。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;后来，就像建造巴比伦塔一样，世界各地的都开始使用计算机，但是很多国家用的不是英文，他们的字母里有许多是ASCII里没有的，为了可以在计算机保存他们的文字，他们决定采用127号之后的空位来表示这些新的字母、符号，还加入了很多画表格时需要用下到的横线、竖线、交叉等形状，一直把序号编到了最后一个状态255。从128到255这一页的字符集被称&#34;扩展字符集&#34;。从此之后，贪婪的人类再没有新的状态可以用了，美帝国主义可能没有想到还有第三世界国家的人们也希望可以用到计算机吧！ <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;等中国人们得到计算机时，已经没有可以利用的字节状态来表示汉字，况且有6000多个常用汉字需要保存呢。但是这难不倒智慧的中国人民，我们不客气地把那些127号之后的奇异符号们直接取消掉, <br/>&nbsp;&nbsp;&nbsp;&nbsp;规定：一个小于127的字符的意义与原来相同，但两个大于127的字符连在一起时，就表示一个汉字，前面的一个字节（他称之为高字节）从0xA1用到 0xF7，后面一个字节（低字节）从0xA1到0xFE，这样我们就可以组合出大约7000多个简体汉字了。在这些编码里，我们还把数学符号、罗马希腊的字母、日文的假名们都编进去了，连在 ASCII 里本来就有的数字、标点、字母都统统重新编了两个字节长的编码，这就是常说的&#34;全角&#34;字符，而原来在127号以下的那些就叫&#34;半角&#34;字符了。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;中国人民看到这样很不错，于是就把这种汉字方案叫做 &#34;GB2312&#34;。GB2312 是对 ASCII 的中文扩展。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;但是中国的汉字太多了，我们很快就就发现有许多人的人名没有办法在这里打出来，特别是某些很会麻烦别人的国家领导人。于是我们不得不继续把 GB2312 没有用到的码位找出来老实不客气地用上。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;后来还是不够用，于是干脆不再要求低字节一定是127号之后的内码，只要第一个字节是大于127就固定表示这是一个汉字的开始，不管后面跟的是不是扩展字符集里的内容。结果扩展之后的编码方案被称为 GBK 标准，GBK 包括了 GB2312 的所有内容，同时又增加了近20000个新的汉字（包括繁体字）和符号。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;后来少数民族也要用电脑了，于是我们再扩展，又加了几千个新的少数民族的字，GBK 扩成了GB18030。从此之后，中华民族的文化就可以在计算机时代中传承了。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;中国的程序员们看到这一系列汉字编码的标准是好的，于是通称他们叫做 &#34;DBCS&#34;（Double Byte Charecter Set 双字节字符集）。在DBCS系列标准里，最大的特点是两字节长的汉字字符和一字节长的英文字符并存于同一套编码方案里，因此他们写的程序为了支持中文处理，必须要注意字串里的每一个字节的值，如果这个值是大于127的，那么就认为一个双字节字符集里的字符出现了。那时候凡是受过加持，会编程的计算机僧侣们都要每天念下面这个咒语数百遍： <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#34;一个汉字算两个英文字符！一个汉字算两个英文字符……&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;因为当时各个国家都像中国这样搞出一套自己的编码标准，结果互相之间谁也不懂谁的编码，谁也不支持别人的编码，连大陆和台湾这样只相隔了150海里，使用着同一种语言的兄弟地区，也分别采用了不同的 DBCS 编码方案——当时的中国人想让电脑显示汉字，就必须装上一个&#34;汉字系统&#34;，专门用来处理汉字的显示、输入的问题，但是那个台湾的愚昧封建人士写的算命程序就必须加装另一套支持 BIG5&nbsp;&nbsp;编码的什么&#34;倚天汉字系统&#34;才可以用，装错了字符系统，显示就会乱了套！这怎么办？而且世界民族之林中还有那些一时用不上电脑的穷苦人民，他们的文字又怎么办？ <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;真是计算机的巴比伦塔命题啊！ <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;正在这时，大天使加百列及时出现了——一个叫 ISO（国际标谁化组织）的国际组织决定着手解决这个问题。他们采用的方法很简单：废了所有的地区性编码方案，重新搞一个包括了地球上所有文化、所有字母和符号的编码！他们打算叫它&#34;Universal Multiple-Octet Coded Character Set&#34;，简称 UCS, 俗称 &#34;UNICODE&#34;。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UNICODE 开始制订时，计算机的存储器容量极大地发展了，空间再也不成为问题了。于是 ISO 就直接规定必须用两个字节，也就是16位来统一表示所有的字符，对于ascii里的那些“半角”字符，UNICODE 包持其原编码不变，只是将其长度由原来的8位扩展为16位，而其他文化和语言的字符则全部重新统一编码。由于&#34;半角&#34;英文符号只需要用到低8位，所以其高 8位永远是0，因此这种大气的方案在保存英文文本时会多浪费一倍的空间。 <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这时候，从旧社会里走过来的程序员开始发现一个奇怪的现象：他们的strlen函数靠不住了，一个汉字不再是相当于两个字符了，而是一个！是的，从 UNICODE 开始，无论是半角的英文字母，还是全角的汉字，它们都是统一的&#34;一个字符&#34;！同时，也都是统一的&#34;两个字节&#34;，请注意&#34;字符&#34;和&#34;字节&#34;两个术语的不同，“字节”是一个8位的物理存贮单元，而“字符”则是一个文化相关的符号。在UNICODE 中，一个字符就是两个字节。一个汉字算两个英文字符的时代已经快过去了。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;从前多种字符集存在时，那些做多语言软件的公司遇上过很大麻烦，他们为了在不同的国家销售同一套软件，就不得不在区域化软件时也加持那个双字节字符集咒语，不仅要处处小心不要搞错，还要把软件中的文字在不同的字符集中转来转去。UNICODE 对于他们来说是一个很好的一揽子解决方案，于是从 Windows NT 开始，MS 趁机把它们的操作系统改了一遍，把所有的核心代码都改成了用 UNICODE 方式工作的版本，从这时开始，WINDOWS 系统终于无需要加装各种本土语言系统，就可以显示全世界上所有文化的字符了。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;但是，UNICODE 在制订时没有考虑与任何一种现有的编码方案保持兼容，这使得 GBK 与UNICODE 在汉字的内码编排上完全是不一样的，没有一种简单的算术方法可以把文本内容从UNICODE编码和另一种编码进行转换，这种转换必须通过查表来进行。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;如前所述，UNICODE 是用两个字节来表示为一个字符，他总共可以组合出65535不同的字符，这大概已经可以覆盖世界上所有文化的符号。如果还不够也没有关系，ISO已经准备了UCS-4方案，说简单了就是四个字节来表示一个字符，这样我们就可以组合出21亿个不同的字符出来（最高位有其他用途），这大概可以用到银河联邦成立那一天吧！<br/>&nbsp;&nbsp;&nbsp;&nbsp;UNICODE 来到时，一起到来的还有计算机网络的兴起，UNICODE 如何在网络上传输也是一个必须考虑的问题，于是面向传输的众多 UTF（UCS Transfer Format）标准出现了，顾名思义，UTF8就是每次8个位传输数据，而UTF16就是每次16个位，只不过为了传输时的可靠性，从UNICODE到 UTF时并不是直接的对应，而是要过一些算法和规则来转换。 <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;受到过网络编程加持的计算机僧侣们都知道，在网络里传递信息时有一个很重要的问题，就是对于数据高低位的解读方式，一些计算机是采用低位先发送的方法，例如我们PC机采用的 INTEL 架构，而另一些是采用高位先发送的方式，在网络中交换数据时，为了核对双方对于高低位的认识是否是一致的，采用了一种很简便的方法，就是在文本流的开始时向对方发送一个标志符——如果之后的文本是高位在位，那就发送&#34;FEFF&#34;，反之，则发送&#34;FFFE&#34;。不信你可以用二进制方式打开一个UTF-X格式的文件，看看开头两个字节是不是这两个字节？<br/>&nbsp;&nbsp;&nbsp;&nbsp;讲到这里，我们再顺便说说一个很著名的奇怪现象：当你在 windows 的记事本里新建一个文件，输入&#34;联通&#34;两个字之后，保存，关闭，然后再次打开，你会发现这两个字已经消失了，代之的是几个乱码！呵呵，有人说这就是联通之所以拼不过移动的原因。 <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;其实这是因为GB2312编码与UTF8编码产生了编码冲撞的原因。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;从网上引来一段从UNICODE到UTF8的转换规则：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Unicode <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UTF-8<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0000 - 007F <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xxxxxxx<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0080 - 07FF <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;110xxxxx 10xxxxxx<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0800 - FFFF <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1110xxxx 10xxxxxx 10xxxxxx<br/>&nbsp;&nbsp;&nbsp;&nbsp;例如&#34;汉&#34;字的Unicode编码是6C49。6C49在0800-FFFF之间，所以要用3字节模板：1110xxxx 10xxxxxx 10xxxxxx。将6C49写成二进制是：0110 1100 0100 1001，将这个比特流按三字节模板的分段方法分为0110 110001 001001，依次代替模板中的x，得到：1110-0110 10-110001 10-001001，即E6 B1 89，这就是其UTF8的编码。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;而当你新建一个文本文件时，记事本的编码默认是ANSI,如果你在ANSI的编码输入汉字，那么他实际就是GB系列的编码方式，在这种编码下，&#34;联通&#34;的内码是： <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c1 1100 0001 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aa 1010 1010 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cd 1100 1101 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a8 1010 1000 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;注意到了吗？第一二个字节、第三四个字节的起始部分的都是&#34;110&#34;和&#34;10&#34;，正好与UTF8规则里的两字节模板是一致的，于是再次打开记事本时，记事本就误认为这是一个UTF8编码的文件，让我们把第一个字节的110和第二个字节的10去掉，我们就得到了&#34;00001 101010&#34;，再把各位对齐，补上前导的0，就得到了&#34;0000 0000 0110 1010&#34;，不好意思，这是UNICODE的006A，也就是小写的字母&#34;j&#34;，而之后的两字节用UTF8解码之后是0368，这个字符什么也不是。这就是只有&#34;联通&#34;两个字的文件没有办法在记事本里正常显示的原因。 <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;而如果你在&#34;联通&#34;之后多输入几个字，其他的字的编码不见得又恰好是110和10开始的字节，这样再次打开时，记事本就不会坚持这是一个utf8编码的文件，而会用ANSI的方式解读之，这时乱码又不出现了。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;好了，终于可以回答NICO的问题了，在数据库里，有n前缀的字串类型就是UNICODE类型，这种类型中，固定用两个字节来表示一个字符，无论这个字符是汉字还是英文字母，或是别的什么。 <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;如果你要测试&#34;abc汉字&#34;这个串的长度，在没有n前缀的数据类型里，这个字串是7个字符的长度，因为一个汉字相当于两个字符。而在有n前缀的数据类型里，同样的测试串长度的函数将会告诉你是5个字符，因为一个汉字就是一个字符。<br/><br/><br/>]]></description>
		</item>
		
</channel>
</rss>

