﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-从点点滴滴改变</title><link>http://www.cnitblog.com/chibohua/</link><description>生活是美好的!</description><language>zh-cn</language><lastBuildDate>Mon, 04 May 2026 22:27:01 GMT</lastBuildDate><pubDate>Mon, 04 May 2026 22:27:01 GMT</pubDate><ttl>60</ttl><item><title>如何提问</title><link>http://www.cnitblog.com/chibohua/archive/2006/08/10/15070.html</link><dc:creator>抱着太阳跳舞</dc:creator><author>抱着太阳跳舞</author><pubDate>Thu, 10 Aug 2006 07:07:00 GMT</pubDate><guid>http://www.cnitblog.com/chibohua/archive/2006/08/10/15070.html</guid><wfw:comment>http://www.cnitblog.com/chibohua/comments/15070.html</wfw:comment><comments>http://www.cnitblog.com/chibohua/archive/2006/08/10/15070.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/chibohua/comments/commentRss/15070.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chibohua/services/trackbacks/15070.html</trackback:ping><description><![CDATA[
		<p>
				<br />在黑客世界?，当提出一个技术问题时，你能得到怎样的回答？ <br />这取决於挖出答案的难度，同样取决於你提问的方法。 <br />本指南旨在帮助你提高发问技巧，以获取你最想要的答案。 </p>
		<p>首先你必须明白，黑客们只偏爱艰巨的任务，或者能激发他们思维的好问题。 <br />如若不然，我们还来干吗？如果你有值得我们反复咀嚼玩味的好问题， <br />我们自会对你感激不尽。好问题是激励，是厚礼，可以提高我们的理解力， <br />而且通常会暴露我们以前从没意识到或者思考过的问题。 <br />对黑客而言，“问得好！”是发自内心的大力称赞。 </p>
		<p>尽管黑客们有蔑视简单问题和不友善的坏名声，有时看起来似乎我们对新手， <br />对知识贫乏者怀有敌意，但其实不是那样的。 </p>
		<p>我们不想掩饰对这样一些人的蔑视--他们不愿思考， <br />或者在发问前不去完成他们应该做的事。 <br />这种人只会谋杀时间--他们只愿索取，从不付出，无端消耗我们的时间， <br />而我们本可以把时间用在更有趣的问题或者更值得回答的人身上。 <br />我们称这样的人为“失败者”（由於历史原因，我们有时把它拼作“lusers”）。 </p>
		<p>我们在很大程度上属於志愿者，从繁忙的生活中抽出时间来解惑答疑， <br />而且时常被提问淹没。所以我们无情的滤掉一些话题， <br />特别是抛弃那些看起来象失败者的家伙，以便更高效的利用时间来回答胜利者的问题。 </p>
		<p>如果你觉得我们过於傲慢的态度让你不爽，让你委屈，不妨设身处地想想。 <br />我们并没有要求你向我们屈服--事实上，我们中的大多数人最喜欢公平交易不过了， <br />只要你付出小小努力来满足最起码的要求，我们就会欢迎你加入到我们的文化中来 <br />但让我们帮助那些不愿意帮助自己的人是没有意义的。 </p>
		<p>如果你不能接受这种“歧视”，我们建议你花点钱找家商业公司签个术支援协议得了， <br />别向黑客乞求 如果你决定向我们求助，当然不希望被视为失败者， <br />更不愿成为失败者中的一员。立刻得到有效答案的最好方法，就是象胜利者那样提问 <br />—— 聪明、自信、有解决问题的思路，只是偶尔在特定的问题上需要获得一点帮助。 </p>
		<p>（欢迎对本指南提出改进意见。任何建议请E-mail至<a href="mailto:esr@thyrsus.com">esr@thyrsus.com</a>， <br />然而 请注意，本文并非网路礼节的通用指南，我通常会拒绝无助於在技术论坛 <br />得到有用答案的建议。） （当然，如果你写中文，最好还是寄<a href="mailto:DHGrand@hotmail.com">DHGrand@hotmail.com</a>;-） </p>
		<p>= 提问之前 = </p>
		<p>在通过电邮、新闻组或者聊天室提出技术问题前，检查你有没有做到： <br />1. 通读手册，试著自己找答案。 <br />2. 在FAQ?找答案（一份维护得好的FAQ可以包罗万象:）。 <br />3. 在网上搜索（个人推荐google~~~）。 <br />4. 向你身边精於此道的朋友打听。 </p>
		<p>当你提出问题的时候，首先要说明在此之前你干了些什麽； <br />这将有助於树立你的形象：你不是一个妄图不劳而获的乞讨者，不愿浪费别人的时间。 <br />如果提问者能从答案中学到东西，我们更乐於回答他的问题。 </p>
		<p>周全的思考，准备好你的问题，草率的发问只能得到草率的回答， <br />或者根本得不到任何答案。越表现出在寻求帮助前为解决问题付出的努力， <br />你越能得到实质性的帮助。 </p>
		<p>小心别问错了问题。如果你的问题基於错误的假设，普通黑客（J. Random Hacker） <br />通常会用无意义的字面解释来答复你，心?想著“蠢问题...”， <br />希望著你会从问题的回答（而非你想得到的答案）中汲取教训。 </p>
		<p>决不要自以为够资格得到答案，你没这种资格。毕竟你没有为这种服务支付任何报酬。 <br />你要自己去“挣”回一个答案，靠提出一个有内涵的，有趣的， <br />有思维激励作用的问题--一个对社区的经验有潜在贡献的问题， <br />而不仅仅是被动的从他人处索要知识--去挣到这个答案。 </p>
		<p>另一方面，表明你愿意在找答案的过程中做点什麽，是一个非常好的开端。 <br />“谁能给点提示？”、“我这个例子?缺了什麽？”以及“我应该检查什麽地方？” <br />比“请把确切的过程贴出来”更容易得到答复。因为你显得只要有人指点正确的方向， <br />你就有完成它的能力和决心。 </p>
		<p>= 怎样提问 = </p>
		<p>- 谨慎选择论坛 <br />小心选择提问的场合。如果象下面描述的那样，你很可能被忽略掉或者被看作失败者： <br />1. 在风马牛不相及的论坛贴出你的问题 <br />2. 在探讨高级技巧的论坛张贴非常初级的问题；反之亦然 <br />3. 在太多的不同新闻组交叉张贴 </p>
		<p>- 用辞贴切，语法正确，拼写无误 <br />我们从经验中发现，粗心的写作者通常也是马虎的思考者（我敢打包票）。 <br />回答粗心大意者的问题很不值得，我们宁愿把时间耗在别处。 </p>
		<p>正确的拼写，标点符号和大小写很重要。 <br />更一般的说，如果你的提问写得象个半文盲，你很有可能被忽视。 </p>
		<p>如果你在使用非母语的论坛提问，你可以犯点拼写和语法上的小错 <br />--但决不能在思考上马虎（没错，我们能弄清两者的分别） </p>
		<p>- 使用含义丰富，描述准确的标题 <br />在邮件列表或者新闻组中，大约50字以内的主题标题是抓住资深专家注意力的黄金时机。 <br />别用喋喋不休的“帮帮忙”（更别说“救命啊！！！！！”这 样让人反感的话） <br />来浪费这个机会。不要妄想用你的痛苦程度来打动我们， 别用空格代替问题的描述， <br />哪怕是极其简短的描述。 </p>
		<p>蠢问题： 救命啊！我的膝上机不能正常显示了！ <br />聪明问题： XFree86 4.1下滑鼠游标变形，Fooware MV1005的显示晶片。 </p>
		<p>如果你在回复中提出问题，记得要修改内容标题，表明?面有一个问题。 <br />一个看起来象“Re：测试”或者“Re：新bug”的问题很难引起足够重视。 <br />另外，引用并删减前文的内容，给新来的读者留下线索。 </p>
		<p>- 精确描述，信息量大 <br />1. 谨慎明确的描述症状。 <br />2. 提供问题发生的环境（机器配置、作业系统、应用程式以及别的什麽）。 <br />3. 说明你在提问前是怎样去研究和理解这个问题的。 <br />4. 说明你在提问前采取了什麽步骤去解决它。 <br />5. 罗列最近做过什麽可能有影响的硬体、软体变更。 </p>
		<p>尽量想像一个黑客会怎样反问你，在提问的时候预先给他答案。 </p>
		<p>Simon Tatham写过一篇名为《如何有效的报告Bug》的出色短文。强力推荐你也读一读。 </p>
		<p>- 话不在多 <br />你需要提供精确有效的资讯。这并不是要求你简单的把成吨的出错代码或者资料 <br />完全转储摘录到你的提问中。如果你有庞大而复杂的测试条件， <br />尽量把它剪裁得越小越好。 这样做的用处至少有三点。 <br />第一，表现出你为简化问题付出了努力，这可以使你得到回答的机会增加； <br />第二，简化问题使你得到有用答案的机会增加； <br />第三，在提炼 你的bug报告的过 </p>
		<p>
				<br />- 只说症状，不说猜想 <br />告诉黑客们你认为问题是怎样引起的没什麽帮助。 <br />（如果你的推断如此有效，还用向别人求助吗？）， <br />因此要确信你原原本本告诉了他们问题的症状，不要加进你自己的理解和推论。 <br />让黑客们来诊断吧。 </p>
		<p>蠢问题： 我在内核编译中一次又一次遇到SIG11错误， <br />我怀疑某条飞线搭在主板的走线上了，这种情况应该怎样检查最好？ <br />聪明问题： 我自制的一套K6/233系统，主板是FIC-PA2007 （VIA Apollo VP2晶片组）， <br />256MB Corsair PC133 SDRAM，在内核编译中频频产生SIG11错误， <br />从开机20分钟以后就有这种情况，开机 前20分钟内从没发生过。 <br />重启也没有用，但是关机一晚上就又能工作20分钟。所有记忆体都换过了，没有效果。 <br />相关部分的典型编译记录如下...。 </p>
		<p>- 按时间顺序列出症状 <br />对找出问题最有帮助的线索，往往就是问题发生前的一系列操作， <br />因此，你的说明 应该包含操作步骤，以及电脑的反应，直到问题产生。 </p>
		<p>如果你的说明很长（超过四个段落），在开头简述问题会有所帮助， <br />接下来按时间顺序详述。这样黑客们就知道该在你的说明中找什麽。 </p>
		<p>- 明白你想问什麽 <br />漫无边际的提问近乎无休无止的时间黑洞。最能给你有用答案的人也正是最忙的人 <br />（他们忙是因为要亲自完成大部分工作）。这样的人对无节制的时间黑洞不太感冒， <br />因此也可以说他们对漫无边际的提问不大感冒。 </p>
		<p>如果你明确表述需要回答者做什麽（提供建议，发送一段代码，检查你的补丁 或是别的） <br />，就最有可能得到有用的答案。 <br />这会定出一个时间和精力的上限，便於回答者集中精力来帮你 <br />A这很凑效。要理解专家们生活的世界，要把专业技能想像为充裕的资源， <br />而回复的时间则是贫乏的资源。解决你的问题需要的时间越少， <br />越能从忙碌的专家口中掏出答案。 </p>
		<p>因此，优化问题的结构，尽量减少专家们解决它所需要的时间， <br />会有很大的帮助--这通常和简化问题有所区别。 <br />因此，问“我想更好的理解X，能给点提示吗？”通常比问“你能解释一下X吗？更好。 <br />如果你的代码不能工作，问问它有什麽地方不对，比要求别人替你修改要明智得多。 </p>
		<p>- 别问应该自己解决的问题 <br />黑客们总是善於分辨哪些问题应该由你自己解决；因为我们中的大多数都曾自己解决 <br />这类问题。同样，这些问题得由你来搞定，你会从中学到东西。 <br />你可以要求给点提示，但别要求得到完整的解决方案。 </p>
		<p>- 去除无意义的疑问 <br />别用无意义的话结束提问，例如“有人能帮我吗？”或者“有答案吗？”。 <br />首先：如果你对问题的描述不很合适，这样问更是画蛇添足。 <br />其次：由於这 样问是画蛇添足，黑客们会很厌烦你--而且通常会用逻辑上正确的回答 <br />来表 示他们的蔑视，例如：“没错，有人能帮你”或者“不，没答案”。 </p>
		<p>- 谦逊绝没有害处，而且常帮大忙 <br />彬彬有礼，多用“请”和“先道个谢了”。 <br />让大家都知道你对他们花费时间义务提供帮助心存感激。 <br />然而，如果你有很多问题无法解决，礼貌将会增加你得到有用答案的机会。 </p>
		<p>（我们注意到，自从本指南发布后，从资深黑客处得到的唯一严重缺陷反馈， <br />就是对预先道谢这一条。一些黑客觉得“先谢了”的言外之意是过后就不会再感谢 <br />任何人了。我们的建议是：都道谢。） </p>
		<p>- 问题解决后，加个简短说明 <br />问题解决后，向所有帮助过你的人发个说明，让他们知道问题是怎样解决的， <br />并再一次向他们表示感谢。如果问题在新闻组或者邮件列表中引起了广泛关注， <br />应该在那?贴一个补充说明 <br />。补充说明不必很长或是很深入；简单的一句“你好，原来是网线出了问题！ <br />谢谢大家--Bill”比什麽也不说要强。事实上，除非结论真的很有技术含量， <br />否则简短可爱的小结比长篇学 <br />术论文更好。说明问题是怎样解决的，但大可不必将解决问题的过程复述一遍。 <br />除了表示礼貌和反馈资讯以外，这种补充有助於他人在邮件列表/新闻组/论坛中搜索 <br />对你有过帮助的完整 <br />解决方案，这可能对他们也很有用。最后（至少？）， <br />这种补充有助於所有提供过帮助的人从中得到满足感。 <br />如果你自己不是老手或者黑客，那就相信我们，这种感觉对於那些你向他们 <br />求助的导师或者专家而言，是非常重要的。问题久拖未决会让人灰心； <br />黑客们渴望看到问题被解决。好人有好报，满足他们的渴望， <br />你会在下次贴出新问题时尝到甜头。 </p>
		<p>- 还是不懂 <br />如果你不是很理解答案，别立刻要求对方解释。 <br />象你以前试著自己解决问题时那样（利用手册，FAQ，网路，身边的高手）， <br />去理解它。如果你真的需要对方解释，记得表现出你已经学 <br />□F点什麽。比方说，如果我回答你：“看来似乎是zEntry被阻塞了； <br />你应该先清除它。”，然后：一个很糟的后续问题：“zEntry是什麽？” <br />聪明的问法应该是这样：“哦~~~我看过帮助了但是只有-z和-p两个参数中 <br />提到了zEntry而且还都没有清楚的解释:&lt;你是指这两个中的哪一个吗？ <br />还是我看漏了什麽？” </p>
		<p>=三思而后问 = </p>
		<p>以下是几个经典蠢问题，以及黑客在拒绝回答时的心中所想： </p>
		<p>问题：我能在哪找到X程式？ <br />问题：我的程式/配置/SQL申明没有用 <br />问题：我的Windows有问题，你能帮我吗？ <br />问题：我在安装Linux（或者X）时有问题，你能帮我吗？ <br />问题：我怎麽才能破解root帐号/窃取OP特权/读别人的邮件呢？ </p>
		<p>提问：我能在哪找到X程式？ <br />回答：就在我找到它的地方啊蠢货--搜索引擎的那一头。天?！还有人不会用Google吗？ </p>
		<p>提问：我的程式（配置、SQL申明）没有用 <br />回答：这不算是问题吧，我对找出你的真正问题没兴趣--如果要我问你二十个问题 <br />才找得出来的话--我有更有意思的事要做呢。 </p>
		<p>在看到这类问题的时候，我的反应通常不外如下三种 </p>
		<p>1. 你还有什麽要补充的吗？ <br />2. 真糟糕，希望你能搞定。 <br />3. 这跟我有什麽鸟相关？ </p>
		<p>提问：我的Windows有问题，你能帮我吗？ <br />回答：能啊，扔掉萎软的垃圾，换Linux吧。 </p>
		<p>提问：我在安装Linux（或者X）时有问题，你能帮我吗？ <br />回答：不能，我只有亲自在你的电脑上动手才能找到毛病。 <br />还是去找你当地的Linux用户组寻求手把手的指导吧（你能在这儿找到用户组的清单）。 </p>
		<p>提问：我怎麽才能破解root帐号/窃取OP特权/读别人的邮件呢？ <br />回答：想要这样做，说明你是个卑鄙小人；想找个黑客帮你，说明你是个白痴！ </p>
		<p>= 好问题，坏问题 = </p>
		<p>最后，我举一些例子来说明，怎样聪明的提问； <br />同一个问题的两种问法被放在一起，一种是愚蠢的，另一种才是明智的。 </p>
		<p>蠢问题：我可以在哪儿找到关於Foonly Flurbamatic的资料？ <br />// 这种问法无非想得到“STFW”这样的回答。 </p>
		<p>聪明问题：我用Google搜索过“Foonly Flurbamatic 2600”， <br />但是没找到有用的结果。谁知道上哪儿去找对这种设备编程的资料？ <br />// 这个问题已经STFW过了，看起来他真的遇到了麻烦。 </p>
		<p>蠢问题：我从FOO项目找来的源码没法编译。它怎麽这麽烂？ <br />// 他觉得都是别人的错，这个傲慢自大的家伙 </p>
		<p>聪明问题：FOO专案代码在Nulix 6.2版下无法编译通过。 <br />我读过了FAQ，但?面没有提到跟Nulix有关的问题。 <br />这是我编译过程的记录，我有什麽做得不对的地方吗？ <br />// 他讲明了环境，也读过了FAQ，还指明了错误， <br />并且他没有把问题的责任推到别人头上，这个家伙值得留意。 </p>
		<p>蠢问题：我的主板有问题了，谁来帮我？ <br />// 普通黑客对这类问题的回答通常是：“好的，还要帮你拍拍背和换尿布吗？” <br />，然后按下删除键。 </p>
		<p>聪明问题：我在S2464主板上试过了X、Y和Z，但没什麽作用， <br />我又试了A、B和C。请注意当我尝试C时的奇怪现象。显然边带传输中出现了收缩， <br />但结果出人意料。在多处理器主板上引起边带泄漏的通常原因是什麽？ <br />谁有好主意接下来我该做些什麽测试才能找出问题？ <br />// 这个家伙，从另一个角度来看，值得去回答他。他表现出了解决问题的能力， <br />而不是坐等天上掉答案。 </p>
		<p>在最后一个问题中，注意“告诉我答案”和“给我启示，指出我还应该做什麽诊断工作” <br />之间微妙而又重要的区别。 <br />事实上，后一个问题源自於2001年8月在Linux内核邮件列表上的一个真实的提问。 <br />我（Eric）就是那个提出问题的人。我在Tyan S2464主板上观察到了这种无法解释的 <br />锁定现象，列表成员们提供了解决那一问题的重要资讯。 </p>
		<p>通过我的提问方法，我给了大家值得玩味的东西；我让人们很容易参与并且被吸引进来。 <br />我显示了自己具备和他们同等的能力，邀请他们与我共同探讨。 <br />我告诉他们我所走过的弯路，以避免他们再浪费时间，这是一种对他人时间价值的尊重。 <br />后来，当我向每个人表示感谢，并且赞赏这套程式（指邮件列表中的讨论 <br />--译者注）运作得非常出色的时候，一个Linux内核 <br />件列（lkml）成员表示，问题得到解决并非由於我是这个列表中的“名人”， <br />而是因为我用了正确的方式来提问。 <br />我们黑客从某种角度来说是拥有丰富知识但缺乏人情味的家伙；我相信 <br />他是对的，如果我象个乞讨者那样提问，不论我是谁，一定会惹恼某些人 <br />或者被他们忽视。他建议我记下这件事，给编写这个指南的人一些指导。 </p>
		<p>= 找不到答案怎麽办 = </p>
		<p>如果仍得不到答案，请不要以为我们觉得无法帮助你。 <br />有时只是看到你问题的人不知道答案罢了。没有回应不代表你被忽视， <br />虽然不可否认这种差别很难区分。 </p>
		<p>总的说来，简单的重复张贴问题是个很糟的想法。这将被视为无意义的喧闹。 </p>
		<p>你可以通过其他渠道获得帮助，这些渠道通常更适合初学者的需要。 <br />有许多网上的以及本地的用户组，由狂热的软体爱好者 <br />（即使他们可能从没亲自写过任何软体）组成。通常人们组建 <br />这样的团体来互相帮助并帮助新手。 </p>
		<p>另外，你可以向很多商业公司寻求帮助，不论公司大还是小 <br />（Red Hat 和LinuxCare 就是两个最常见的例子）。 <br />别为要付费才能获得帮助而感到沮丧！毕竟，假使你的汽车发动机汽缸密 <br />封圈爆掉了--完全可能如此--你还得把它送到修车铺，并且为维修付费。 <br />就算软体没花费你一分钱，你也不能强求技术支援总是免费的。 </p>
		<p>对大众化的软体，就象Linux之类而言，每个开发者至少会有上万名用户。 <br />根本不可能由一个人来处理来自上万名用户的求助电话。 <br />要知道，即使你要为帮助付费，同你必须购买同类软体相比， <br />你所付出的也是微不足道的（通常封闭源代码软体的技术支援费用比开放源代码软体 <br />要高得多，且内容也不那麽丰富）。 </p>
		<p>
				<br />RTFM和STFW：别烦我啦 </p>
		<p>有一个古老而神圣的传统：如果你收到“RTFM （Read The Fucking Manual）”的 <br />回复，回答者认为你应该去读TMD手册。当然，基本上他是对的，你应该读一读。 </p>
		<p>RTFM有一个年轻的亲戚。如果答案是“STFW （Search The Fucking Web）”，回 <br />答者认为你应该到TMD的网上去搜索。基本上，他也是对的，你就去找吧。 </p>
		<p>通常，用这两句之一回答你的人会给你一份包含你需要内容的手册或者一个网址， <br />而且他们打这些字的时候正在阅读著。 <br />这些答复意味著回答者认为(1). 你需要的 资讯非常容易获得； <br />(2). 你自己去搜索这些资讯比灌给你能让你学到更多。 </p>
		<p>别为这个而不爽；依照黑客的标准，他没有对你的要求视而不见，已经能大致能表 <br />示对你的关注。你应该对他祖母般的慈祥表示感谢。 </p>
		<p> </p>
<img src ="http://www.cnitblog.com/chibohua/aggbug/15070.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chibohua/" target="_blank">抱着太阳跳舞</a> 2006-08-10 15:07 <a href="http://www.cnitblog.com/chibohua/archive/2006/08/10/15070.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>URL编码方法的比较</title><link>http://www.cnitblog.com/chibohua/archive/2006/08/09/15006.html</link><dc:creator>抱着太阳跳舞</dc:creator><author>抱着太阳跳舞</author><pubDate>Wed, 09 Aug 2006 05:40:00 GMT</pubDate><guid>http://www.cnitblog.com/chibohua/archive/2006/08/09/15006.html</guid><wfw:comment>http://www.cnitblog.com/chibohua/comments/15006.html</wfw:comment><comments>http://www.cnitblog.com/chibohua/archive/2006/08/09/15006.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/chibohua/comments/commentRss/15006.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chibohua/services/trackbacks/15006.html</trackback:ping><description><![CDATA[
		<h2>
				<a class="entrytitlelist" title="URL编码方法的比较" href="http://www.zeali.net/entry/160" rel="bookmark">
				</a> </h2>
		<div class="modcontent">
				<div id="entry_introduce">
						<div class="entry_introduce">javascript中存在几种对URL字符串进行编码的方法：escape()，encodeURI()，以及encodeURIComponent()。这几种编码所起的作用各不相同。</div>
				</div>
				<div id="entryBody">
						<p style="FONT-WEIGHT: bold; FONT-SIZE: 14px">escape() 方法： </p>
						<p>采用ISO Latin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码（xx等于该字符在字符集表里面的编码的16进制数字）。比如，空格符对应的编码是%20。</p>
						<p>不会被此方法编码的字符： <font style="COLOR: black; BACKGROUND-COLOR: #e4e4e4">@ * / +</font></p>
						<p style="FONT-WEIGHT: bold; FONT-SIZE: 14px">encodeURI() 方法：</p>
						<p>把URI字符串采用UTF-8编码格式转化成escape格式的字符串。</p>
						<p>不会被此方法编码的字符：<font style="COLOR: black; BACKGROUND-COLOR: #e4e4e4">! @ # $&amp; * ( ) = : / ; ? + '</font></p>
						<p style="FONT-WEIGHT: bold; FONT-SIZE: 14px">encodeURIComponent() 方法：</p>
						<p>把URI字符串采用UTF-8编码格式转化成escape格式的字符串。与encodeURI()相比，这个方法将对更多的字符进行编码，比如 / 等字符。所以如果字符串里面包含了URI的几个部分的话，不能用这个方法来进行编码，否则 / 字符被编码之后URL将显示错误。</p>
						<p>不会被此方法编码的字符：<font style="COLOR: black; BACKGROUND-COLOR: #e4e4e4">! * ( ) '</font></p>
						<p>因此，对于中文字符串来说，如果不希望把字符串编码格式转化成UTF-8格式的（比如原页面和目标页面的charset是一致的时候），只需要使用escape。如果你的页面是GB2312或者其他的编码，而接受参数的页面是UTF-8编码的，就要采用encodeURI或者encodeURIComponent。</p>
						<p>另外，encodeURI/encodeURIComponent是在javascript1.5之后引进的，escape则在javascript1.0版本就有。</p>
				</div>
		</div>
<img src ="http://www.cnitblog.com/chibohua/aggbug/15006.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chibohua/" target="_blank">抱着太阳跳舞</a> 2006-08-09 13:40 <a href="http://www.cnitblog.com/chibohua/archive/2006/08/09/15006.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>将Asp.Net页面输出到EXCEL里去</title><link>http://www.cnitblog.com/chibohua/archive/2006/06/15/12294.html</link><dc:creator>抱着太阳跳舞</dc:creator><author>抱着太阳跳舞</author><pubDate>Thu, 15 Jun 2006 05:39:00 GMT</pubDate><guid>http://www.cnitblog.com/chibohua/archive/2006/06/15/12294.html</guid><wfw:comment>http://www.cnitblog.com/chibohua/comments/12294.html</wfw:comment><comments>http://www.cnitblog.com/chibohua/archive/2006/06/15/12294.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/chibohua/comments/commentRss/12294.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chibohua/services/trackbacks/12294.html</trackback:ping><description><![CDATA[其实，利用ASP.NET输出指定内容的WORD、EXCEL、TXT、HTM等类型的文档很容易的。主要分为三步来完成。 <br /><br /><br />　　一、定义文档类型、字符编码　　 
<p></p><table bordercolor="#55aaff" cellspacing="0" cellpadding="0" rules="none" width="500" align="center" bgcolor="#ddedfb" border="1"><tbody><tr><td width="10"><br /></td><td>　　 Response.Clear(); 
<p>　　 Response.Buffer= true; </p><p>　　 Response.Charset="utf-8";　　 </p><p>　　 //下面这行很重要， attachment 参数表示作为附件下载，您可以改成 online在线打开 </p><p>　　 //filename=FileFlow.xls 指定输出文件的名称，注意其扩展名和指定文件类型相符，可以为：.doc 　　 .xls 　　 .txt 　　.htm　　 </p><p>　　 Response.AppendHeader("Content-Disposition","attachment;filename=FileFlow.xls"); </p><p>　　 Response.ContentEncoding=System.Text.Encoding.GetEncoding("utf-8");　　 </p><p>　　 //Response.ContentType指定文件类型 可以为application/ms-excel 　　 application/ms-word 　　 application/ms-txt 　　 application/ms-html 　　 或其他浏览器可直接支持文档　 </p><p>　　 Response.ContentType = "application/ms-excel"; </p><p>　　 this.EnableViewState = false;　　</p></td></tr></tbody></table><p>　　二、定义一个输入流　　 </p><p></p><table bordercolor="#55aaff" cellspacing="0" cellpadding="0" rules="none" width="500" align="center" bgcolor="#ddedfb" border="1"><tbody><tr><td width="10"><br /></td><td>　　 System.IO.StringWriter oStringWriter = new System.IO.StringWriter(); 
<p>　　 System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);</p></td></tr></tbody></table><p>　　三、将目标数据绑定到输入流输出　　 </p><p></p><table bordercolor="#55aaff" cellspacing="0" cellpadding="0" rules="none" width="500" align="center" bgcolor="#ddedfb" border="1"><tbody><tr><td width="10"><br /></td><td>　　 this.RenderControl(oHtmlTextWriter); 　　 
<p>　　 //this 表示输出本页，你也可以绑定datagrid,或其他支持obj.RenderControl()属性的控件　　 </p><p>　　 Response.Write(oStringWriter.ToString()); </p><p>　　 Response.End();　　 </p></td></tr></tbody></table><p>　　<strong>总结：</strong>本例程在Microsoft Visual Studio .NET 2003平台下测试通过，适用于C#和VB，当采用VB的时候将 this 关键字改成 me 。 </p><img src ="http://www.cnitblog.com/chibohua/aggbug/12294.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chibohua/" target="_blank">抱着太阳跳舞</a> 2006-06-15 13:39 <a href="http://www.cnitblog.com/chibohua/archive/2006/06/15/12294.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript之ActiveXObject("Scripting.Dictionary")用法小例</title><link>http://www.cnitblog.com/chibohua/archive/2006/06/15/12292.html</link><dc:creator>抱着太阳跳舞</dc:creator><author>抱着太阳跳舞</author><pubDate>Thu, 15 Jun 2006 03:32:00 GMT</pubDate><guid>http://www.cnitblog.com/chibohua/archive/2006/06/15/12292.html</guid><wfw:comment>http://www.cnitblog.com/chibohua/comments/12292.html</wfw:comment><comments>http://www.cnitblog.com/chibohua/archive/2006/06/15/12292.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/chibohua/comments/commentRss/12292.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chibohua/services/trackbacks/12292.html</trackback:ping><description><![CDATA[说明：个人理解Scripting.Dictionary创建的对象，它的集合中每一项包含两个属性一个是键值，一个是值，即（key，value），其中value可以是任何类型的对象或数值。<br /><br />&lt;script language = javascript&gt;<br /> function ok(){<br />  try{<br />   var obj = new ActiveXObject("Scripting.Dictionary");//创建对象<br />   obj.Add("hello",null);//增加新项<br />   obj.Item("hello")="Chiweiyao";//给新增添的项赋值<br />   obj.Add("world",null);<br />   obj.Item("world")="Greate";<br />   <br />   var keys=obj.Keys().toArray();//将obj对象的键值转换成数组<br />   for(var i = 0;i&lt;keys.length;i++){<br />       if(obj.Exists(keys[i])){//判断对象集合中是否存在指定键值的项<br />        obj.Item(keys[i])=null;<br />        obj.Remove(keys[i]);//删除指定键值项<br />       }<br />   } <br />  }<br />  catch(e)<br />  {<br />   alert(e.message);<br />  }<br /> }<br />&lt;/script&gt;<img src ="http://www.cnitblog.com/chibohua/aggbug/12292.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chibohua/" target="_blank">抱着太阳跳舞</a> 2006-06-15 11:32 <a href="http://www.cnitblog.com/chibohua/archive/2006/06/15/12292.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript之ActiveXObject（创建Excel）</title><link>http://www.cnitblog.com/chibohua/archive/2006/06/15/12291.html</link><dc:creator>抱着太阳跳舞</dc:creator><author>抱着太阳跳舞</author><pubDate>Thu, 15 Jun 2006 03:01:00 GMT</pubDate><guid>http://www.cnitblog.com/chibohua/archive/2006/06/15/12291.html</guid><wfw:comment>http://www.cnitblog.com/chibohua/comments/12291.html</wfw:comment><comments>http://www.cnitblog.com/chibohua/archive/2006/06/15/12291.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/chibohua/comments/commentRss/12291.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chibohua/services/trackbacks/12291.html</trackback:ping><description><![CDATA[
		<p>JScript 8.0  （转载msdn）<br />ActiveXObject 对象  </p>
		<p>此对象提供自动化对象的接口。</p>
		<p>function ActiveXObject(ProgID : String [, location : String])<br />参数</p>
		<p>ProgID<br />必选。形式为“serverName.typeName”的字符串，其中 serverName 是提供对象的应用程序的名称，typeName 是要创建的对象的类型或类。</p>
		<p>location<br />可选项。要在其中创建对象的网络访问器的名称。</p>
		<p>备注</p>
		<p>通常，自动化服务器会提供至少一种对象。例如，字处理应用程序可能会提供应用程序对象、文档对象和工具栏对象。</p>
		<p>以下代码通过调用 ActiveXObject 对象构造函数来启动应用程序（在这种情况下为 Microsoft Excel 工作表）。ActiveXObject 允许您在代码中引用应用程序。使用下面的示例，您可以使用对象变量 ExcelSheet 和其他 Excel 对象（包括应用程序对象和 ActiveSheet.Cells 集合）来访问新对象的属性和方法。</p>
		<p>// Declare the variables<br />var Excel, Book;</p>
		<p>// Create the Excel application object.<br />Excel = new ActiveXObject("Excel.Application");</p>
		<p>// Make Excel visible.<br />Excel.Visible = true;</p>
		<p>// Create a new work book.<br />Book = Excel.Workbooks.Add()</p>
		<p>// Place some text in the first cell of the sheet.<br />Book.ActiveSheet.Cells(1,1).Value = "This is column A, row 1";</p>
		<p>// Save the sheet.<br />Book.SaveAs("C:\\TEST.XLS");</p>
		<p>// Close Excel with the Quit method on the Application object.<br />Excel.Application.Quit();<br />若要在远程服务器上创建对象，只能在关闭 Internet 安全机制时完成。您可以通过将计算机的名称传递到 ActiveXObject 的 servername 参数在远程网络计算机上创建对象。该名称与共享名的计算机名部分相同。对于名为“\\MyServer\public”的网络共享，servername 为“MyServer”。此外，您可以使用 DNS 格式或 IP 地址来指定 servername。</p>
		<p>以下代码返回在名为“MyServer”的远程网络计算机上运行的 Excel 实例的版本号：</p>
		<p>function GetAppVersion() {<br />   var Excel = new ActiveXObject("Excel.Application", "MyServer");<br />   return(Excel.Version);<br />}<br />如果指定的远程服务器不存在或者找不到，则会出错。<br /></p>
<img src ="http://www.cnitblog.com/chibohua/aggbug/12291.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chibohua/" target="_blank">抱着太阳跳舞</a> 2006-06-15 11:01 <a href="http://www.cnitblog.com/chibohua/archive/2006/06/15/12291.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>