??xml version="1.0" encoding="utf-8" standalone="yes"?>中文字幕在线亚洲三区,h短视频大全在线观看,久久视频免费http://www.aygfsteel.com/xyang/zh-cnTue, 06 May 2025 06:00:29 GMTTue, 06 May 2025 06:00:29 GMT60正则表达?/title><link>http://www.aygfsteel.com/xyang/archive/2006/10/14/75187.html</link><dc:creator>xyang</dc:creator><author>xyang</author><pubDate>Sat, 14 Oct 2006 13:59:00 GMT</pubDate><guid>http://www.aygfsteel.com/xyang/archive/2006/10/14/75187.html</guid><wfw:comment>http://www.aygfsteel.com/xyang/comments/75187.html</wfw:comment><comments>http://www.aygfsteel.com/xyang/archive/2006/10/14/75187.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/xyang/comments/commentRss/75187.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/xyang/services/trackbacks/75187.html</trackback:ping><description><![CDATA[ <p>正则表达式是烦琐的,但是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感。只要认真去阅读q些资料Q加上应用的时候进行一定的参考,掌握正则表达式不是问题?/p> <p>索引</p> <p>1. 引子<br />2. 正则表达式的历史<br />3. 正则表达式定?/p> <p>3.1 普通字W?br />3.2 非打印字W?br />3.3 Ҏ字符<br />3.4 限定W?br />3.5 定位W?br />3.6 选择<br />3.7 后向引用</p> <p>4. 各种操作W的q算优先U?br />5. 全部W号解释<br />6. 部分例子<br />7. 正则表达式匹配规?/p> <p>7.1 基本模式匚w<br />7.2 字符?br />7.3 定重复出现</p> <p> <!--more--> </p> <p>1. 引子<br />  目前Q正则表辑ּ已经在很多Y件中得到q泛的应用,包括*nixQLinux, Unix{)QHP{操作系l,PHPQC#QJava{开发环境,以及很多的应用Y件中Q都可以看到正则表达式的影子?/p> <p>  正则表达式的使用Q可以通过单的办法来实现强大的功能。ؓ了简单有效而又不失强大Q造成了正则表辑ּ代码的难度较大,学习h也不是很ҎQ所以需要付Z些努力才行,入门之后参照一定的参考,使用hq是比较单有效的?/p> <div id="wmqeeuq" class="hl-surround"> <div id="wmqeeuq" class="hl-main">例子Q?^.+@.+\\..+$</div> </div> <p>  q样的代码曾l多ơ把我自q吓退q。可能很多h也是被这L代码l吓跑的吧。l阅L文将让你也可以自由应用这L代码?/p> <p>  注意Q这里的W?部分跟前面的内容看v来似乎有些重复,目的是把前面表格里的部分重新描述了一ơ,目的是让q些内容更容易理解?/p> <p>2. 正则表达式的历史<br />  正则表达式的“祖先”可以一直上溯至对hcȝl系l如何工作的早期研究。Warren McCulloch ?Walter Pitts q两位神l生理学家研I出一U数学方式来描述q些经|络?br />  1956 q? 一位叫 Stephen Kleene 的数学家?McCulloch ?Pitts 早期工作的基上,发表了一标题ؓ“神l网事g的表C法”的论文Q引入了正则表达式的概念。正则表辑ּ是用来描述他称为“正则集的代数”的表达式,因此采用“正则表辑ּ”这个术语?/p> <p>  随后Q发现可以将q一工作应用于?Ken Thompson 的计搜索算法的一些早期研IӞKen Thompson ?Unix 的主要发明h。正则表辑ּ的第一个实用应用程序就?Unix 中的 qed ~辑器?/p> <p>  如他们所_剩下的就是众所周知的历史了。从那时L至现在正则表辑ּ都是Z文本的编辑器和搜索工具中的一个重要部分?/p> <p> </p> <p>3. 正则表达式定?br />  正则表达?regular expression)描述了一U字W串匚w的模式,可以用来查一个串是否含有某种子串、将匚w的子串做替换或者从某个串中取出W合某个条g的子串等?/p> <div id="wmqeeuq" class="hl-surround"> <div id="wmqeeuq" class="hl-main">列目录时Q dir *.txt或ls *.txt中的*.txt׃是一个正则表辑ּ,因ؓq里*与正则式?的含义是不同的?<br />  正则表达式是由普通字W(例如字符 a ?zQ以及特D字W(UCؓ元字W)l成的文字模式。正则表辑ּ作ؓ一个模板,某个字W模式与所搜烦的字W串q行匚w?/div> </div> <p>3.1 普通字W?br />  由所有那些未昑ּ指定为元字符的打印和非打印字W组成。这包括所有的大写和小写字母字W,所有数字,所有标点符号以及一些符受?</p> <p>3.2 非打印字W?br />字符 含义<br />\cx 匚w由x指明的控制字W。例如, \cM 匚w一?Control-M 或回车符。x 的值必Mؓ A-Z ?a-z 之一。否则,?c 视ؓ一个原义的 ‘c?字符?br />\f 匚w一个换늬。等价于 \x0c ?\cL?br />\n 匚w一个换行符。等价于 \x0a ?\cJ?br />\r 匚w一个回车符。等价于 \x0d ?\cM?br />\s 匚wMI白字符Q包括空根{制表符、换늬{等。等价于 [ \f\n\r\t\v]?br />\S 匚wM非空白字W。等价于 [^ \f\n\r\t\v]?br />\t 匚w一个制表符。等价于 \x09 ?\cI?br />\v 匚w一个垂直制表符。等价于 \x0b ?\cK?</p> <p> <br />3.3 Ҏ字符<br />  所谓特D字W,是一些有Ҏ含义的字W,如上面说的?.txt”中?Q简单的说就是表CZQ何字W串的意思。如果要查找文g名中有*的文Ӟ则需要对Q进行{义,卛_其前加一个\。ls \*.txt。正则表辑ּ有以下特D字W?br /> </p> <p>特别字符 说明<br />$ 匚w输入字符串的l尾位置。如果设|了 RegExp 对象?Multiline 属性,?$ 也匹?‘\n??‘\r’。要匚w $ 字符本nQ请使用 \$?br />( ) 标记一个子表达式的开始和l束位置。子表达式可以获取供以后使用。要匚wq些字符Q请使用 \( ?\)?br />* 匚w前面的子表达式零ơ或多次。要匚w * 字符Q请使用 \*?br />+ 匚w前面的子表达式一ơ或多次。要匚w + 字符Q请使用 \+?br />. 匚w除换行符 \n之外的Q何单字符。要匚w .Q请使用 \?br />[ 标记一个中括号表达式的开始。要匚w [Q请使用 \[?br />? 匚w前面的子表达式零ơ或一ơ,或指明一个非贪婪限定W。要匚w ? 字符Q请使用 \??br />\ 下一个字W标Cؓ或特D字W、或原义字符、或向后引用、或八进制{义符。例如, ‘n?匚w字符 ‘n’。’\n?匚w换行W。序?‘\\?匚w “\”,?‘\(?则匹??”?br />^ 匚w输入字符串的开始位|,除非在方括号表达式中使用Q此时它表示不接受该字符集合。要匚w ^ 字符本nQ请使用 \^?br />{ 标记限定W表辑ּ的开始。要匚w {Q请使用 \{?br />| 指明两项之间的一个选择。要匚w |Q请使用 \|?</p> <p>  构造正则表辑ּ的方法和创徏数学表达式的Ҏ一栗也是用多U元字符与操作符小的表辑ּl合在一h创徏更大的表辑ּ。正则表辑ּ的组件可以是单个的字W、字W集合、字W范围、字W间的选择或者所有这些组件的Ll合?br /> </p> <p>3.4 限定W?br />  限定W用来指定正则表辑ּ的一个给定组件必要出现多少ơ才能满_配。有*??或{n}或{n,}或{n,m}?U?br />*??限定W都是贪婪的Q因为它们会可能多的匹配文字,只有在它们的后面加上一?可以实现非贪婪或最匹配?br />  正则表达式的限定W有Q?br />  字符 描述<br />* 匚w前面的子表达式零ơ或多次。例如,zo* 能匹?“z?以及 “zoo”? {h于{0,}?br />+ 匚w前面的子表达式一ơ或多次。例如,’zo+?能匹?“zo?以及 “zoo”,但不能匹?“z”? {h?{1,}?br />? 匚w前面的子表达式零ơ或一ơ。例如,”do(es)??可以匚w “do??“does?中的”do?? {h?{0,1}?br />{n} n 是一个非负整数。匹配确定的 n ơ。例如,’o{2}?不能匚w “Bob?中的 ‘o’,但是能匹?“food?中的两个 o?br />{n,} n 是一个非负整数。至匹配n ơ。例如,’o{2,}?不能匚w “Bob?中的 ‘o’,但能匚w “foooood?中的所?o。’o{1,}?{h?‘o+’。’o{0,}?则等价于 ‘o*’?br />{n,m} m ?n 均ؓ非负整数Q其中n <= m。最匹?n ơ且最多匹?m ơ。例如,”o{1,3}?匹?“fooooood?中的前三?o。’o{0,1}?{h?‘o?’。请注意在逗号和两个数之间不能有空根{?</p> <p>3.5 定位W?br />  用来描述字符串或单词的边界,^?分别指字W串的开始与l束Q\b描述单词的前或后边界Q\B表示非单词边界。不能对定位W用限定符?</p> <p>3.6 选择<br />  用圆括号所有选择ҎhQ相ȝ选择之间用|分隔。但用圆括号会有一个副作用Q是相关的匹配会被缓存,此时可用?:攑֜W一个选项前来消除q种副作用?br />  其中?:是非捕获元之一Q还有两个非捕获元是?=?!Q这两个q有更多的含义,前者ؓ正向预查Q在M开始匹配圆括号内的正则表达式模式的位置来匹配搜索字W串Q后者ؓ负向预查Q在M开始不匚w该正则表辑ּ模式的位|来匚w搜烦字符丌Ӏ?</p> <p>3.7 后向引用<br />  对一个正则表辑ּ模式或部分模式两Ҏ加圆括号导致相兛_配存储到一个时缓冲区中,所捕获的每个子匚w都按照在正则表达式模式中从左臛_所遇到的内容存储。存储子匚w的缓冲区~号?1 开始,q箋~号直至最?99 个子表达式。每个缓冲区都可以?‘\n?讉KQ其?n Z个标识特定缓冲区的一位或两位十进制数?br />  可以使用非捕获元字符 ?:? ?=? or ?!?来忽略对相关匚w的保存?</p> <p>4. 各种操作W的q算优先U?br />  相同优先U的从左到右q行q算Q不同优先的运先高后低。各U操作符的优先从高C如下Q?br />  操作W?描述<br />\ 转义W?br />(), (?:), (?=), [] 圆括号和Ҏ?br />*, +, ?, {n}, {n,}, {n,m} 限定W?br />^, $, \anymetacharacter 位置和顺?br />| “或”操?</p> <p>5. 全部W号解释</p> <p>字符 描述<br />\ 下一个字W标Cؓ一个特D字W、或一个原义字W、或一?向后引用、或一个八q制转义W。例如,’n?匚w字符 “n”。’\n?匚w一个换行符。序?‘\\?匚w “\??“\(?则匹??”?br />^ 匚w输入字符串的开始位|。如果设|了 RegExp 对象?Multiline 属性,^ 也匹?‘\n??‘\r?之后的位|?br />$ 匚w输入字符串的l束位置。如果设|了RegExp 对象?Multiline 属性,$ 也匹?‘\n??‘\r?之前的位|?br />* 匚w前面的子表达式零ơ或多次。例如,zo* 能匹?“z?以及 “zoo”? {h于{0,}?br />+ 匚w前面的子表达式一ơ或多次。例如,’zo+?能匹?“zo?以及 “zoo”,但不能匹?“z”? {h?{1,}?br />? 匚w前面的子表达式零ơ或一ơ。例如,”do(es)??可以匚w “do??“does?中的”do?? {h?{0,1}?br />{n} n 是一个非负整数。匹配确定的 n ơ。例如,’o{2}?不能匚w “Bob?中的 ‘o’,但是能匹?“food?中的两个 o?br />{n,} n 是一个非负整数。至匹配n ơ。例如,’o{2,}?不能匚w “Bob?中的 ‘o’,但能匚w “foooood?中的所?o。’o{1,}?{h?‘o+’。’o{0,}?则等价于 ‘o*’?br />{n,m} m ?n 均ؓ非负整数Q其中n <= m。最匹?n ơ且最多匹?m ơ。例如,”o{1,3}?匹?“fooooood?中的前三?o。’o{0,1}?{h?‘o?’。请注意在逗号和两个数之间不能有空根{?br />? 当该字符紧跟在Q何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面Ӟ匚w模式是非贪婪的。非贪婪模式可能少的匹配所搜烦的字W串Q而默认的贪婪模式则尽可能多的匚w所搜烦的字W串。例如,对于字符?“oooo”,’o+??匹配单?“o”,?‘o+?匹配所?‘o’?br />. 匚w?“\n?之外的Q何单个字W。要匚w包括 ‘\n?在内的Q何字W,请用象 ‘[.\n]?的模式?br />(pattern) 匚w pattern q获取这一匚w。所获取的匹配可以从产生?Matches 集合得到Q在VBScript 中?SubMatches 集合Q在JScript 中则使用 $0?9 属性。要匚w圆括号字W,请?‘\(??‘\)’?br />(?:pattern) 匚w pattern 但不获取匚wl果Q也是说这是一个非获取匚wQ不q行存储供以后用。这在?“或?字符 (|) 来组合一个模式的各个部分是很有用。例如, ‘industr(?:y|ies) 是一个比 ‘industry|industries?更简略的表达式?br />(?=pattern) 正向预查Q在M匚w pattern 的字W串开始处匚w查找字符丌Ӏ这是一个非获取匚wQ也是_该匹配不需要获取供以后使用。例如,’Windows (?=95|98|NT|2000)?能匹?“Windows 2000?中的 “Windows?Q但不能匚w “Windows 3.1?中的 “Windows”。预查不消耗字W,也就是说Q在一个匹配发生后Q在最后一ơ匹配之后立卛_始下一ơ匹配的搜烦Q而不是从包含预查的字W之后开始?br />(?!pattern) 负向预查Q在M不匹?pattern 的字W串开始处匚w查找字符丌Ӏ这是一个非获取匚wQ也是_该匹配不需要获取供以后使用。例如’Windows (?!95|98|NT|2000)?能匹?“Windows 3.1?中的 “Windows”,但不能匹?“Windows 2000?中的 “Windows”。预查不消耗字W,也就是说Q在一个匹配发生后Q在最后一ơ匹配之后立卛_始下一ơ匹配的搜烦Q而不是从包含预查的字W之后开?br />x|y 匚w x ?y。例如,’z|food?能匹?“z??“food”。?z|f)ood?则匹?“zood??“food”?br />[xyz] 字符集合。匹配所包含的Q意一个字W。例如, ‘[abc]?可以匚w “plain?中的 ‘a’?br />[^xyz] 负值字W集合。匹配未包含的Q意字W。例如, ‘[^abc]?可以匚w “plain?中的’p'?br />[a-z] 字符范围。匹配指定范围内的Q意字W。例如,’[a-z]?可以匚w ‘a??‘z?范围内的L写字母字符?br />[^a-z] 负值字W范围。匹配Q何不在指定范围内的Q意字W。例如,’[^a-z]?可以匚wM不在 ‘a??‘z?范围内的L字符?br />\b 匚w一个单词边界,也就是指单词和空格间的位|。例如, ‘er\b?可以匚w”never?中的 ‘er’,但不能匹?“verb?中的 ‘er’?br />\B 匚w非单词边界。’er\B?能匹?“verb?中的 ‘er’,但不能匹?“never?中的 ‘er’?br />\cx 匚w?x 指明的控制字W。例如, \cM 匚w一?Control-M 或回车符。x 的值必Mؓ A-Z ?a-z 之一。否则,?c 视ؓ一个原义的 ‘c?字符?br />\d 匚w一个数字字W。等价于 [0-9]?br />\D 匚w一个非数字字符。等价于 [^0-9]?br />\f 匚w一个换늬。等价于 \x0c ?\cL?br />\n 匚w一个换行符。等价于 \x0a ?\cJ?br />\r 匚w一个回车符。等价于 \x0d ?\cM?br />\s 匚wMI白字符Q包括空根{制表符、换늬{等。等价于 [ \f\n\r\t\v]?br />\S 匚wM非空白字W。等价于 [^ \f\n\r\t\v]?br />\t 匚w一个制表符。等价于 \x09 ?\cI?br />\v 匚w一个垂直制表符。等价于 \x0b ?\cK?br />\w 匚w包括下划U的M单词字符。等价于’[A-Za-z0-9_]’?br />\W 匚wM非单词字W。等价于 ‘[^A-Za-z0-9_]’?br />\xn 匚w nQ其?n 为十六进制{义倹{十六进制{义值必Mؓ定的两个数字长。例如,’\x41?匚w “A”。’\x041?则等价于 ‘\x04?& ?‟뀂正则表辑ּ中可以?ASCII ~码?<br />\num 匚w numQ其?num 是一个正整数。对所获取的匹配的引用。例如,?.)\1?匚w两个q箋的相同字W?br />\n 标识一个八q制转义值或一个向后引用。如?\n 之前臛_ n 个获取的子表辑ּQ则 n 为向后引用。否则,如果 n 为八q制数字 (0-7)Q则 n Z个八q制转义倹{?br />\nm 标识一个八q制转义值或一个向后引用。如?\nm 之前臛_?nm 个获得子表达式,?nm 为向后引用。如?\nm 之前臛_?n 个获取,?n Z个后跟文?m 的向后引用。如果前面的条g都不满Q若 n ?m 均ؓ八进制数?(0-7)Q则 \nm 匹配八q制转义?nm?br />\nml 如果 n 为八q制数字 (0-3)Q且 m ?l 均ؓ八进制数?(0-7)Q则匚w八进制{义?nml?br />\un 匚w nQ其?n 是一个用四个十六q制数字表示?Unicode 字符。例如, \u00A9 匚w版权W号 (?)?</p> <p> </p> <p>6. 部分例子</p> <p>正则表达?说明<br />/\b([a-z]+) \1\b/gi 一个单词连l出现的位置<br />/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/ 一个URL解析为协议、域、端口及相对路径<br />/^(?:Chapter|Section) [1-9][0-9]{0,1}$/ 定位章节的位|?br />/[-a-z]/ A至z?6个字母再加一?受?br />/ter\b/ 可匹配chapterQ而不能terminal<br />/\Bapt/ 可匹配chapterQ而不能aptitude<br />/Windows(?=95 |98 |NT )/ 可匹配Windows95或Windows98或WindowsNT,当找C个匹配后Q从Windows后面开始进行下一ơ的索匹配?</p> <p>7. 正则表达式匹配规?br />7.1 基本模式匚w</p> <p>  一切从最基本的开始。模式,是正规表辑ּ最基本的元素,它们是一l描q字W串特征的字W。模式可以很单,由普通的字符串组成,也可以非常复杂,往往用特D的字符表示一个范围内的字W、重复出玎ͼ或表CZ下文。例如:</p> <div id="wmqeeuq" class="hl-surround"> <div id="wmqeeuq" class="hl-main">^once</div> </div> <p>  q个模式包含一个特D的字符^Q表C模式只匹配那些以once开头的字符丌Ӏ例如该模式与字W串”once upon a time”匹配,与”There once was a man from NewYork”不匚w。正如如^W号表示开头一P$W号用来匚w那些以给定模式结字符丌Ӏ?/p> <div id="wmqeeuq" class="hl-surround"> <div id="wmqeeuq" class="hl-main">bucket$</div> </div> <p>  q个模式与”Who kept all of this cash in a bucket”匹配,与”buckets”不匚w。字W^?同时使用Ӟ表示_匚wQ字W串与模式一P。例如:</p> <div id="wmqeeuq" class="hl-surround"> <div id="wmqeeuq" class="hl-main">^bucket$</div> </div> <p>  只匹配字W串”bucket”。如果一个模式不包括^?Q那么它与Q何包含该模式的字W串匚w。例如:模式</p> <div id="wmqeeuq" class="hl-surround"> <div id="wmqeeuq" class="hl-main">once</div> </div> <p>与字W串</p> <div id="wmqeeuq" class="hl-surround"> <div id="wmqeeuq" class="hl-main">There once was a man from NewYork<br />Who kept all of his cash in a bucket.</div> </div> <p>是匹配的?/p> <p>  在该模式中的字母(o-n-c-e)是字面的字符Q也是_他们表示该字母本w,数字也是一L。其他一些稍微复杂的字符Q如标点W号和白字符Q空根{制表符{)Q要用到转义序列。所有的转义序列都用反斜?\)打头。制表符的{义序列是Q\t。所以如果我们要一个字W串是否以制表符开_可以用这个模式:</p> <div id="wmqeeuq" class="hl-surround"> <div id="wmqeeuq" class="hl-main">^\t</div> </div> <p>cM的,用\n表示“新行”,\r表示回R。其他的ҎW号Q可以用在前面加上反斜杠Q如反斜杠本w用\\表示Q句?用\.表示Q以此类推?/p> <p>7.2 字符?/p> <p>在INTERNET的程序中Q正规表辑ּ通常用来验证用户的输入。当用户提交一个form以后Q要判断输入的电话号码、地址、EMAIL地址、信用卡L{是否有效,用普通的Z字面的字W是不够的?/p> <p>所以要用一U更自由的描q我们要的模式的办法Q它是字符。要建立一个表C所有元韛_W的字符,把所有的元音字符攑֜一个方括号里:</p> <div id="wmqeeuq" class="hl-surround"> <div id="wmqeeuq" class="hl-main">[AaEeIiOoUu]</div> </div> <p>q个模式与Q何元韛_W匹配,但只能表CZ个字W。用q字号可以表CZ个字W的范围Q如Q?/p> <div id="wmqeeuq" class="hl-surround"> <div id="wmqeeuq" class="hl-main">[a-z] //匚w所有的写字母 <br />[A-Z] //匚w所有的大写字母 <br />[a-zA-Z] //匚w所有的字母 <br />[0-9] //匚w所有的数字 <br />[0-9\.\-] //匚w所有的数字Q句号和减号 <br />[ \f\r\t\n] //匚w所有的白字W?/div> </div> <p>同样的,q些也只表示一个字W,q是一个非帔R要的。如果要匚w一个由一个小写字母和一位数字组成的字符Ԍ比如”z2‟뀁”t6x”g7※I但不是”ab2‟뀁”r2d3?或”b52″的话,用这个模式:</p> <div id="wmqeeuq" class="hl-surround"> <div id="wmqeeuq" class="hl-main">^[a-z][0-9]$</div> </div> <p>管[a-z]代表26个字母的范围Q但在这里它只能与第一个字W是写字母的字W串匚w?/p> <p>前面曄提到^表示字符串的开_但它q有另外一个含义。当在一l方括号里用^是,它表C“非”或“排除”的意思,常常用来剔除某个字符。还用前面的例子Q我们要求第一个字W不能是数字Q?/p> <div id="wmqeeuq" class="hl-surround"> <div id="wmqeeuq" class="hl-main">^[^0-9][0-9]$</div> </div> <p>q个模式与?amp;5‟뀁”g7‛_?2x匚w的,但与?2‟뀁?6x不匹配的。下面是几个排除特定字符的例子:</p> <div id="wmqeeuq" class="hl-surround"> <div id="wmqeeuq" class="hl-main">[^a-z] //除了写字母以外的所有字W?<br />[^\\\/\^] //除了(\)(/)(^)之外的所有字W?<br />[^\"\'] //除了双引?")和单引号(')之外的所有字W?/div> </div> <p>Ҏ字符??(点,句号)在正规表辑ּ中用来表C除了“新行”之外的所有字W。所以模式”^.5$”与M两个字符的、以数字5l尾和以其他非“新行”字W开头的字符串匹配。模式?”可以匹配Q何字W串Q除了空串和只包括一个“新行”的字符丌Ӏ?/p> <p>PHP的正规表辑ּ有一些内|的通用字符,列表如下Q?/p> <div id="wmqeeuq" class="hl-surround"> <div id="wmqeeuq" class="hl-main">字符?含义 <br />[[:alpha:]] M字母 <br />[[:digit:]] M数字 <br />[[:alnum:]] M字母和数?<br />[[:space:]] M白字W?<br />[[:upper:]] M大写字母 <br />[[:lower:]] M写字母 <br />[[:punct:]] M标点W号 <br />[[:xdigit:]] M16q制的数字,相当于[0-9a-fA-F]</div> </div> <p>7.3 定重复出现</p> <p>到现在ؓ止,你已l知道如何去匚w一个字母或数字Q但更多的情况下Q可能要匚w一个单词或一l数字。一个单词有若干个字母组成,一l数字有若干个单数组成。跟在字W或字符后面的花括?{})用来定前面的内容的重复出现的次数?</p> <div id="wmqeeuq" class="hl-surround"> <div id="wmqeeuq" class="hl-main">字符?含义 <br />^[a-zA-Z_]$ 所有的字母和下划线 <br />^[[:alpha:]]{3}$ 所有的3个字母的单词 <br />^a$ 字母a <br />^a{4}$ aaaa <br />^a{2,4}$ aa,aaa或aaaa <br />^a{1,3}$ a,aa或aaa <br />^a{2,}$ 包含多于两个a的字W串 <br />^a{2,} 如:aardvark和aaabQ但apple不行 <br />a{2,} 如:baad和aaaQ但Nantucket不行 <br />\t{2} 两个制表W?<br />.{2} 所有的两个字符</div> </div> <p>q些例子描述了花括号的三U不同的用法。一个数字,{x}的意思是“前面的字符或字W簇只出现xơ”;一个数字加逗号Q{x,}的意思是“前面的内容出现x或更多的ơ数”;两个用逗号分隔的数字,{x,y}表示“前面的内容臛_出现xơ,但不过yơ”。我们可以把模式扩展到更多的单词或数字:</p> <div id="wmqeeuq" class="hl-surround"> <div id="wmqeeuq" class="hl-main">^[a-zA-Z0-9_]{1,}$ //所有包含一个以上的字母、数字或下划U的字符?<br />^[0-9]{1,}$ //所有的正数 <br />^\-{0,1}[0-9]{1,}$ //所有的整数 <br />^\-{0,1}[0-9]{0,}\.{0,1}[0-9]{0,}$ //所有的数</div> </div> <p>最后一个例子不太好理解Q是吗?q么看吧Q与所有以一个可选的负号(\-{0,1})开?^)、跟着0个或更多的数?[0-9]{0,})、和一个可选的数?\.{0,1})再跟?个或多个数字([0-9]{0,})Qƈ且没有其他Q何东?$)。下面你知道能够用的更ؓ单的Ҏ?/p> <p>Ҏ字符?”与{0,1}是相{的Q它们都代表着Q?个或1个前面的内容”或“前面的内容是可选的”。所以刚才的例子可以化ؓQ?/p> <div id="wmqeeuq" class="hl-surround"> <div id="wmqeeuq" class="hl-main">^\-?[0-9]{0,}\.?[0-9]{0,}$</div> </div> <p>Ҏ字符?”与{0,}是相{的Q它们都代表着?个或多个前面的内容”。最后,字符?”与 {1,}是相{的Q表C?个或多个前面的内容”,所以上面的4个例子可以写成:</p> <div id="wmqeeuq" class="hl-surround"> <div id="wmqeeuq" class="hl-main">^[a-zA-Z0-9_]+$ //所有包含一个以上的字母、数字或下划U的字符?<br />^[0-9]+$ //所有的正数 <br />^\-?[0-9]+$ //所有的整数 <br />^\-?[0-9]*\.?[0-9]*$ //所有的数</div> </div> <p>当然qƈ不能从技术上降低正规表达式的复杂性,但可以它们更容易阅诅R?/p> <img src ="http://www.aygfsteel.com/xyang/aggbug/75187.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/xyang/" target="_blank">xyang</a> 2006-10-14 21:59 <a href="http://www.aygfsteel.com/xyang/archive/2006/10/14/75187.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Open Source Portal Servers Written in Java http://www.aygfsteel.com/xyang/archive/2006/10/10/74220.htmlxyangxyangTue, 10 Oct 2006 01:44:00 GMThttp://www.aygfsteel.com/xyang/archive/2006/10/10/74220.htmlhttp://www.aygfsteel.com/xyang/comments/74220.htmlhttp://www.aygfsteel.com/xyang/archive/2006/10/10/74220.html#Feedback0http://www.aygfsteel.com/xyang/comments/commentRss/74220.htmlhttp://www.aygfsteel.com/xyang/services/trackbacks/74220.html
  • Liferay - Liferay is designed to deploy portlets that adhere to the Portlet API (JSR 168). Many useful portlets are bundled with the portal (Mail, Document Library, Calendar, Message Boards, to name a few) and can be used as examples for adding your own custom portlets.
  • Exo - The eXo platform is a powerful Open Source - JSR 168 compliant - enterprise portal built from several modules. Based on the most innovative tools, API and frameworks such as Java Server Faces, Pico Container, JbossMX and AspectJ.
  • Pluto - Pluto is the Reference Implementation of the Java Portlet Specfication. The current version of this specification is JSR 168.
  • JA-SIG uPortal - uPortal is a free, sharable portal under development by institutions of higher-education. Community tools, such as chat, forums, survey, and so on, build relationships among campus constituencies. uPortal is an open-standard effort using Java, XML, JSP and J2EE.
  • Redhat Portal Server - Red Hat Portal Server is a open source Portal solution. Supports multiple languages in its user interface and pervasive devices such as WAP, XHTML, and VoiceXML in its rendering pipeline. Portals can be built and targeted for the individual, for work groups or teams, for people with a common set of interests, and for large corporations and organizations.
  • Jakarta Jetspeed 2 Enterprise Portal - Jetspeed is an Open Source implementation of an Enterprise Information Portal, using Java and XML. etspeed-2 is the next-generation enterprise portal at Apache. Jetspeed-2 offers several architectural enhancements and improvements over Jetspeed 1.0. First, Jetspeed-2 is conformant to the Java Portlet Standard and will provide a standard mechanism for the deployment of portlets.
  • Jahia - An integrated web content management and corporate portal server; 100% Java based; Available under a collaborative source license (contribue or pay paradigm); Installed in minutes; Easy to use and to administer; Full Multilanguage and I18N support; Staging environement; Content Workflow; Content Versioning; Document Management (WebDAV Support); Built-in Portlet-based interface; Built-in support for standardized java web applications and web services (default servlets supported as portlets); Full web-based administration; Integrated with the Apache Lucene Search Engine; LDAP compliant; JSP and JSTL support for easy templates development; Integrated HTML cache engine; dynamic XML export module and much more...
  • Gluecode Portal Foundation Server - Gluecode PFS is built in collaboration with the largest open source communities, including JBoss and Apache. It adheres to J2EE specifications, as well as implementations of portal industry standards.
  • jPortlet - jPortlet is not JSR 168 compliant, but the jPortlet API is very similar to the IBM WebSpere Portal Server.
  • GridSphere - 100% JSR 168 Portlet API compliant. Portlet API implementation nearly fully compatible with IBM's WebSphere 4.2. Higher-level model for building complex portlets using visual beans and the GridSphere User Interface (UI) tag library. Built-in support for Role Based Access Control (RBAC) separating users into guests, users, admins and super users. Persistence of data provided using Hibernate for RDBMS database support Integrated Junit/Cactus unit tests. Localization support including English, French, German, Czech, Polish, Hungarian and Italian.
  • Cocoon Portal Framework - Apache Cocoon is a web development framework built around the concepts of separation of concerns and component-based web development. Cocoon implements these concepts around the notion of 'component pipelines', each component on the pipeline specializing on a particular operation. The Portal Framework is based on Cocoon and is rumored to eventually support JSR-168.
  • jPorta - jPorta is a fully functional portal engine built on top of the Jeenius Framework (http://jeenius.sourceforge.net). It works with any 2.3 compilant servlet engine and comes with a number of useful gadgets.
  • MyPersonalizer - MyPersonalizer is a J2EE-based framework. The controller layer is built upon Jakarta Struts. MyPersonalizer also provides a number of command line administration tools for initialization tasks and a web administration tool to administrate any portal built with the framework.
  • oPortal - The OWASP Portal project, oPortal, is a portal written in java that aims to become the standard for secure web applications. The OWASP portal is based on the Jakarta Struts framework and designed with security as a REQUIREMENT, not an option. A reference implementation of a secure portal, that will rival the likes of any commercially available portal. JSR-168 compliance scheduled for version 1.1 release.
  • CHEF - CompreHensive collaborativeE Framework. CHEF is a Java J2EE (Servlet) based application server. The portal engine is a version of Apache's Jetspeed. CHEF is a set of tools and services. Tools control an application's user interface. Services provide information modeling, persistence, and important application logic. The tools are a set of groupware applications (such as chat, schedule and resources). The services specifically support the tools (such as content hosting and messaging) and generally support the application environment (such as authentication, event tracking, security).
  • Siemens Intranet Portal Framework - The Siemens Intranet Portal Framework (SIPF) offers a personalized, structured access to information and seamless integration of applications. A web-based work environment is realized within a browser by hierarchically structured virtual desktops.
  • Lutece - Lutece is a web portal engine that lets you quickly create internet or intranet dynamic sites based on HTML, XML or database contents. This tool, developed by the Data Processing Department of the City of Paris for the districts web sites projects, is now used by more than 18 web sites of the city.
  • Sakai Project - Builds on JSR 168 and OKI open service interface definitions. A re-factored set of educational software tools that blends the best of features from the University of Michigan, Indiana University, MIT, Stanford, and the uPortal consortium. The Sakai Project will include an Enterprise Services-based Portal, a complete Course Management System with sophisticated assessment tools, a Research Support Collaboration System, a Workflow Engine, and a Technology Portability Profile as a clear standard for writing future tools that can extend this core set of educational applications. The Sakai Project Core universities are committing over $2 million per year to launch and support this two year project.
  • JBoss Portal - JBoss Portal 2.0 framework and architecture includes the portal container and supports a wide range of features including standard portlets, single sign-on, clustering and internationalization. Portal themes and layouts are configurable. Fine-grained security administration down to portlet permissions rounds out the security model. JBoss Portal 2.0 includes a rich content management system and message board support.
  • Stringbeans - Stringbeans is a platform for building enterprise information portals. The platform is composed of three components: a portal container/server, a Web Services framework, and a process automation engine. Compatible with JSR 168 standard, mobile client support (WML 1.1 and XHTML MP 1.0), JAAS-based user authentication, portlets capable of displaying RSS headlines, multi-page tabular data from database tables, reports, charts, XML documents via XSL tranformations. Stringbeans is deployed as a J2EE Web application in a container that supports Servlets 2.3 and Java Server Pages (JSP) 1.2 specification. EJB support is not required.
  • InfoGlue 2.0 - InfoGlue is a GPL-based content management and JSR 168 Portal system. Key features includes full multi-language support, excellent information reuse between sites and extensive integration capabilities. A dynamic visual page builder. This release supports advanced workflows as well as very detailed access control both internally and externally.
  • NodeVision Portal - NVPortal is the Java Enterprise JSR 168 compliant Portal solution based on a BSD-License. Features include a Business Process Engine and Search Engine based on SOAP, WSRP compliance, Multilingual, Single Sign On and a Graphical administration interface.
  • Pentaho - The Pentaho BI Project provides enterprise-class reporting, analysis, dashboard, data mining and workflow capabilities that help organizations operate more efficiently and effectively. The software offers flexible deployment options that enable use as embeddable components, customized BI application solutions, and as a complete out-of-the-box, integrated BI platform.
  • IPoint Open Edition - iPoint Open Edition has passed the JSR168 TCK. It is designed so that the portal can be developed within a browser. iPoint portal contains many prebuilt portlets and features complete browser based management and site construction.
  • Portals in Cocoon - The portal framework is a portal server that runs inside Cocoon - or to be more precise inside the Cocoon servlet. It contains a portlet container that is called coplet container. Coplet stands for Cocoon Portlet and is the Cocoon equivalent to portlet. The new portal engine is a replacement implementation of a portal engine which focuses on more flexibility and ease-of-use. In addition it supports the JSR-168.
  • Enterprise-class Portal Server Open Source project - The Portal Server open source project is derived from the Sun Java System Portal Server 7 product and will comprise of the following components and technologies: Portlet repository, JSR168 compliant portlet container, Web Services for Remote Portlets (WSRP) 1.0 based producer and consumer implementations, Portal aggregation and administration framework, Communities and collaboration framework/services, Full-text search engine with federated search and taxonomy capabilities, Secure remote access for SSL/VPN capabilities from outside the firewall and Multi-device mobile access capability to all portal content and applications.


xyang 2006-10-10 09:44 发表评论
]]>
Java1.5语言新特?/title><link>http://www.aygfsteel.com/xyang/archive/2006/10/09/74193.html</link><dc:creator>xyang</dc:creator><author>xyang</author><pubDate>Mon, 09 Oct 2006 15:05:00 GMT</pubDate><guid>http://www.aygfsteel.com/xyang/archive/2006/10/09/74193.html</guid><wfw:comment>http://www.aygfsteel.com/xyang/comments/74193.html</wfw:comment><comments>http://www.aygfsteel.com/xyang/archive/2006/10/09/74193.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/xyang/comments/commentRss/74193.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/xyang/services/trackbacks/74193.html</trackback:ping><description><![CDATA[ <p>1. 自动装箱与拆 对应C#<br /> ?.1<br />  Integer i = 10;<br />  int j = i;<br />  <br />2. 更优化的for循环 对应C#---foreach循环<br /> ?.1<br />  String[] names = {"BadBoy","GoodBoy","HappyGirl","sadGirl"};<br />  for(String option: names) {<br />   System.out.println(option);<br />  }<br /> ?.2 加泛型 对应C++模板<br />  import java.util.*;<br />  <br />  ArrayList<String> animals = new ArrayList<String>();<br />  animals.add("Dog");<br />  animals.add("Cat");<br />  animals.add("Chick");<br />  animals.add("Cow");<br />  for(String option : animals) {<br />   System.out.println(option);<br />  }<br />  <br />3.参数可变的方法和printf<br /> ?.1<br />  定义:<br />  public int sum(int... n) {  //传过来nZ个int型数l?br />   int tempSum;<br />   for(int option : n) {<br />    tempSum+=option;<br />   }<br />   /*<br />   for(int i = 0; i < n.length; i++) {<br />    tempSum+=n[i];<br />   }<br />   */<br />   return tempSum;<br />  }<br />  调用1: sum(1);<br />  调用2: sum(1,2);<br />  调用3: sum(1,2,3,4);<br /> ?.2 printfҎ,  对应c语言的printf<br />  int x = 10;<br />  int y = 20;<br />  int sum = x + y;<br />  System.out.printf("%d + %d = %d",x,y,sum);<br />4. 枚D<br /> ?.1<br />  public enum MyColors {<br />   red,<br />   black,<br />   blue,<br />   green,<br />   yellow<br />  }<br />  <br />  MyColors color = MyColors.red;<br />  for(MyColors option : color.values()) {<br />   System.out.println(option);<br />  }<br /><br />/**不能在switch语句里这样写case MyColors.red:<br /> *q样~译器不会让你通过*/<br />switch(color) {<br /> case red:<br />  System.out.println("best color is "+red);<br />  break;<br /> case black:<br />  System.out.println("NO " + black);<br />  break;<br /> default:<br />  System.out.println("What");<br />  break;<br />}<br /><br />5.静态引?br /> ?.1<br />  1.5版本以前的写法是Q?br /> <br />    import java.lang.Math; //E序开头处<br />  <br />    ...<br />  <br />    double x = Math.random(); <br />  1.5版本中可以这样写<br />   import static java.lang.Math.random; //E序开头处<br />   <br />   ...<br />    <br />   double x = random();  </p> <img src ="http://www.aygfsteel.com/xyang/aggbug/74193.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/xyang/" target="_blank">xyang</a> 2006-10-09 23:05 <a href="http://www.aygfsteel.com/xyang/archive/2006/10/09/74193.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用xmlhttp和Java session监听改善站内消息pȝ( ?http://www.aygfsteel.com/xyang/archive/2006/10/09/74192.htmlxyangxyangMon, 09 Oct 2006 14:58:00 GMThttp://www.aygfsteel.com/xyang/archive/2006/10/09/74192.htmlhttp://www.aygfsteel.com/xyang/comments/74192.htmlhttp://www.aygfsteel.com/xyang/archive/2006/10/09/74192.html#Feedback1http://www.aygfsteel.com/xyang/comments/commentRss/74192.htmlhttp://www.aygfsteel.com/xyang/services/trackbacks/74192.html
  Session监听嘛,没什么好解释的,java提供了很灉|的事件机制来监听sessionQ可以监听session的创建和销毁,监控session所携带数据的创建、变化和销毁,可以监听session的锐化和钝化Q了解对象序列化的兄弟应该知道这个)Q其他的q_是个什么情冉|不太清楚Q估计也差不多吧。如果能够对所有客Lsessionq行监控Q就不用再去操作ȝ而危险的Application了?br />
  Xmlhttp是MS推的一Ҏ术,功能很复杂,可以做很多事情,比如客户端可以在单的HTML中打开HTTPq接Q主动向serverh数据q获得返回数据,是DOM技术一个非帔R要的应用Q利用它来写无刷新的动态页面简直是so easyQ做qweb开发的兄弟应该明白它的意义有多么重大?br />
一、 session监听

  servlet中对session的监听有很多接口Q功能很灉|Q最常用的是监听Session和Attribute。这里要澄清一下概念,servlet中的session监听和Attribute监听含义有差别,session监听指的不是我们一般所理解的放|一个session或者销毁一个sessionQ这是Attribute监听的功能,因ؓservlet中放|session的语法是session.setAttribute(“session名?要放入的对象)。而session监听Q监听的是HTTPq接Q只要有用户与serverq接Q就连接的是一个空白的jsp面Q也会触发session事gQ所以此处的session实际上指的是connectionQ用来统计当前在U用h最合适了。不知道我说清楚了没有。下面分别讲解这两种监听方式?br />
1、 session监听

  首先~写一个session监听c,实作HttpSessionListener接口Q它的作用是计算当前有多个在线用户Q?br />
  1. /**
  2. *@Author bromon
  3. *2004-6-12
  4. */
  5. package org.bromon.test;
  6. import javax.servlet.*;
  7. import javax.servlet.http.*;
  8. public class SessionCount implements HttpSessionListener
  9. {
  10.     private static int count=0;
  11.     public void sessionCreated(HttpSessionEvent se)
  12.     {
  13.         count++;
  14.         System.out.println(“session创徏Q?new java.util.Date());
  15.     }
  16.     public void sessionDestroyed(HttpSessionEvent se)
  17.     {
  18.        count--;
  19.        System.out.println(“session销??new java.util.Date());
  20.     }
  21.     public static int getCount()
  22.     {
  23.        return(count);
  24.      }
  25. }



  怎么P是不是一目了Ӟcount被定义ؓstaticQ是因ؓ要保证整个系l只有这一个count。如果你实在不放心,可以把它写成一个单例类?br />
  然后在web.xml中声明这个监听器Q?br /><listener>
<listener-class>
org.bromon.test.SessionCount
</listener-class>
</listener>

  ~写一个测试页面test.jspQ内Ҏ获得countQ?br /><%
int count=org.bromon.test.SessionCount.getCount();
out.println(count);
%>

  需要注意的是,q里Ҏ不涉及Q何session的操作。重启动App serverQ试着q接test.jspQ可以看到监听器已经开始工作?br />
2、 Attribute监听
  作ؓ一个站内消息系l,肯定要获得所有登陆者的IDQ才有可能互发消息。这涉及Attribute监听。假设我们写了个用户登陆的模块,用户通过w䆾验证之后会生一个sessionQ保存它的相关信息,比如Q?br />
  1. //check.jsp
  2. <%
  3.     String name=request.getParameter(“name?;
  4.     Name=new String(name.getBytes(“ISO8859-1?);
  5.     session.setAttribute(“user?name);
  6. %>


  做过jsp的兄弟应该对q段代码再熟悉不q了Q下面写个监听器来监听用L陆,把所有用LID保存C个List当中Q这个监听器实作HttpSessionAttributeListener接口Q?br />
  1. /**
  2. *@Author bromon
  3. *2004-6-12
  4. */
  5. package org.bromon.test;
  6. import javax.servlet.*;
  7. import javax.servlet.http.*;
  8. import java.util.*;
  9. public class OnlineList implements HttpSessionAttributeListener
  10. {
  11.     private static List list=new ArrayList();
  12.     public void attributeAdded(HttpSessionBindingEvent se)
  13.     {
  14.         if(“user?equals(se.getName()))
  15.         {
  16.             list.add(se.getValue());
  17.          }
  18.     }
  19.     public void attributeRemoved(HttpSessionBindingEvent se)
  20.     {
  21.          if(“user?equals(se.getName()))
  22.          {
  23.             list.remove(se.getValue());
  24.          }
  25.     }
  26.     public void attributeReplaced(HttpSessionBindingEvent se){}
  27.     public static List getList()
  28.     {
  29.          return(list);
  30.      }
  31. }


写个单的jsp来得到用户列表:
<%
    java.util.List list=org.bromon.test.OnlineList.getList();
    out.println(“共有?list.size()+”名用户已登陆:?;
    for(int I=0;I<lise.size();i++)
    {
        out.println(list.get(i));
    }
%>

也许你说Q这有什么神奇呢Q监听session而已Q不着急,看看xmlhttp?br />
二、 XMLHTTP

  XMLHTTP的用处很多,q里只说我们需要的Q就是无h的与server通信Q看q段代码Q?br />
  1. <script language="javascript"
  2. xml = new ActiveXObject("Microsoft.XMLHTTP"); 
  3. var post=" ";//构造要携带的数据?/font>
  4. xml.open("POST","http://localhost:7001/TestWL/index.jsp",false);//使用POSTҎ打开一个到服务器的q接Q以异步方式通信 
  5. xml.setrequestheader("content-length",post.length); 
  6. xml.setrequestheader("content-type","application/x-www-form-urlencoded"); 
  7. xml.send(post);//发送数据?/font>
  8. var res = xml.responseText;//接收服务器返回的数据 
  9. document.write(res); 
  10. </script>



  豁然开朗,q段代码是打开一个HTTPq接Q以标准的HTTP格式传递数据,如果你喜Ƣ,可以用XML的格式来传递。更改一下xml对象的构造方式就可以兼容Mozilla和Netscape。下面来写一个轮询,每隔一D|间刷Cơ用户列表,当然Q是不需要刷新页面的Q?br />
  1. <html>
  2. <head><title>探测?lt;/title>
  3. <script language="javascript">
  4. function detect()
  5. {
  6. xml = new ActiveXObject("Microsoft.XMLHTTP"); 
  7. var post=" ";//构造要携带的数据?/font>
  8. xml.open("POST","http://localhost:7001/TestWL/index.jsp",false);//使用POSTҎ打开一个到服务器的q接Q以异步方式通信 
  9. xml.setrequestheader("content-length",post.length); 
  10. xml.setrequestheader("content-type","application/x-www-form-urlencoded"); 
  11. xml.send(post);//发送数据?/font>
  12. var res = xml.responseText;//接收服务器返回的数据 
  13. list.innerText=res;
  14. setTimeout(“detect()?5000);//每隔5U钟轮询一?/font>
  15. </script>
  16. <body onload=”detect()?gt;
  17. <a id=”list?gt;</a>
  18. </body>
  19. </html>
  20. q样的通信方式数据量很,不用重新传递整个页面,5U钟轮一ơ,普通PC也能承受较大的在U数。构造一个探器来监听在U列表和消息Q效果是很好的,即你的客户坐在电脑前袖手旁观,键鼠都不C下,也能保证数据x传递,面也不会发生蟩转和h?br />
      Session监听加上XMLHTTP通信Q开发一个较为完善的站内消息pȝ实在易如反掌


xyang 2006-10-09 22:58 发表评论
]]>
计算机常用英?/title><link>http://www.aygfsteel.com/xyang/archive/2006/10/07/73668.html</link><dc:creator>xyang</dc:creator><author>xyang</author><pubDate>Sat, 07 Oct 2006 13:22:00 GMT</pubDate><guid>http://www.aygfsteel.com/xyang/archive/2006/10/07/73668.html</guid><wfw:comment>http://www.aygfsteel.com/xyang/comments/73668.html</wfw:comment><comments>http://www.aygfsteel.com/xyang/archive/2006/10/07/73668.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/xyang/comments/commentRss/73668.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/xyang/services/trackbacks/73668.html</trackback:ping><description><![CDATA[ <span id="wmqeeuq" class="tpc_content">计算机常用英?br />计算机常用英语术语、词汇表<br />Computer Vocabulary In Common [color=darkblue][/color]Use <br />一、硬件类(Hardware) <br />二、Y件类(Software) <br />三、网l类(Network) <br />四、其?<br /><br />CPU(Center Processor Unit)中央处理单元 <br />mainboardL <br />RAM(random access <br />memory)随机存储?内存) <br />ROM(Read Only Memory)只读存储?<br />Floppy Disk软盘 <br />Hard Disk盘 <br />CD-ROM光盘驱动?光驱) <br />monitor监视?<br />keyboard键盘 <br />mouse鼠标 <br />chip芯片 <br />CD-R光盘d?<br />HUB集线?<br />Modem= MOdulator-DEModulator,调制解调?<br />P-P(Plug and Play)x即用 <br />UPS(Uninterruptable Power Supply)不间断电?<br />BIOS(Basic-input-Output <br />System)基本输入输出pȝ <br />CMOS(Complementary Metal-Oxide-Semiconductor)互补金属氧化物半g <br />setup安装 <br />uninstall卸蝲 <br />wizzard向导 <br />OS(Operation Systrem)操作pȝ <br />OA(Office AutoMation)办公自动?<br />exit退?<br />edit~辑 <br />copy复制 <br />cut剪切 <br />paste_脓 <br />delete删除 <br />select选择 <br />find查找 <br />select all全?<br />replace替换 <br />undo撤消 <br />redo重做 <br />programE序 <br />license许可(? <br />back前一?<br />next下一?<br />finishl束 <br />folder文g?<br />Destination Folder目的文g?<br />user用户 <br />click点击 <br />double click双击 <br />right click叛_ <br />settings讄 <br />update更新 <br />release发布 <br />data数据 <br />data base数据?<br />DBMS(Data Base Manege <br />System)数据库管理系l?<br />view视图 <br />insert插入 <br />object对象 <br />configuration配置 <br />command命o <br />document文档 <br />POST(power-on-self-test)甉|自检E序 <br />cursor光标 <br />attribute属?<br />icon图标 <br />service pack服务补丁 <br />option pack功能补丁 <br />Demo演示 <br />short cut快捷方式 <br />exception异常 <br />debug调试 <br />previous前一?<br />column?<br />row?<br />restart重新启动 <br />text文本 <br />font字体 <br />size大小 <br />scale比例 <br />interface界面 <br />function函数 <br />access讉K <br />manual指南 <br />activeȀz?<br />computer language计算a <br />menu菜单 <br />GUI(graphical user <br />interfaces )囑Ş用户界面 <br />template模版 <br />page setup面讄 <br />password口o <br />code密码 <br />print preview打印预览 <br />zoom in攑֤ <br />zoom out~小 <br />pan漫游 <br />cruise漫游 <br />full screen全屏 <br />tool bar工具?<br />status bar状态条 <br />ruler标尺 <br />table?<br />paragraphD落 <br />symbolW号 <br />style风格 <br />execute执行 <br />graphics囑Ş <br />image囑փ <br />Unix用于服务器的一U操作系l?<br />Mac OSҎ公司开发的操作pȝ <br />OO(Object-Oriented)面向对象 <br />virus病毒 <br />file文g <br />open打开 <br />colse关闭 <br />new新徏 <br />save保存 <br />exit退?<br />clear清除 <br />default默认 <br />LAN局域网 <br />WANq域|?<br />Client/Server客户?服务?<br />ATM( Asynchronous <br />Transfer Mode)异步传输模式 <br />Windows NT微Y公司的网l操作系l?<br />Internet互联|?<br />WWW(World Wide Web)万维|?<br />protocol协议 <br />HTTP文本传输协?<br />FTP文g传输协议 <br />Browser览?<br />homepage主页 <br />Webpage|页 <br />website|站 <br />URL在Internet的WWW服务E序?<br />用于指定信息位置的表C方?<br />Online在线 <br />Email电子邮g <br />ICQ|上d <br />Firewall防火?<br />Gateway|关 <br />HTML文本标识语a <br />hypertext文?<br />hyperlink链接 <br />IP(Address)互联|协?地址) <br />SearchEngine搜烦引擎 <br />TCP/IP用于|络的一l通讯协议 <br />Telnetq程d <br />IE(Internet Explorer)探烦?微Y公司的网l浏览器) <br />Navigator引航?|景公司的浏览器) <br />multimedia多媒?<br />ISO国际标准化组l?<br />ANSI国国家标准协会 <br />able ?<br />activefile zd文g <br />addwatch d监视?<br />allfiles 所有文?<br />allrightsreserved 所有的权力保留 <br />altdirlst 切换目录格式 <br />andfixamuchwiderrangeofdiskproblems q能够解x大范围内的磁盘问?<br />andotherinFORMation 以及其它的信?<br />archivefileattribute 归档文g属?<br />assignto 指定?<br />autoanswer 自动应答 <br />autodetect 自动?<br />autoindent 自动~进 <br />autosave 自动存储 <br />availableonvolume 该盘剩余I间 <br />badcommand 命o?<br />badcommandorfilename 命o或文件名?<br />batchparameters 批处理参?<br />binaryfile 二进制文?<br />binaryfiles 二进制文?<br />borlandinternational borland国际公司 <br />bottommargin 下I白 <br />bydate 按日?<br />byextension 按扩展名 <br />byname 按名U?<br />bytesfree 字节I闲 <br />callstack 调用?<br />casesensitive 区分大小?<br />causespromptingtoconfirmyouwanttooverwritean 要求出现认提示,在你惌盖一?<br />centralpointsoftwareinc central point 软g股䆾公司 <br />changedirectory 更换目录 <br />changedrive 改变驱动?<br />changename 更改名称 <br />characterset 字符?<br />checkingfor 正在?<br />checksadiskanddisplaysastatusreport 查磁盘ƈ昄一个状态报?<br />chgdrivepath 改变?路径 <br />china 中国 <br />chooseoneofthefollowing 从下列中选一?<br />clearall 全部清除 <br />clearallbreakpoints 清除所有断?<br />clearsanattribute 清除属?<br />clearscommandhistory 清除命o历史 <br />clearscreen 清除屏幕 <br />closeall 关闭所有文?<br />codegeneration 代码生成 <br />colorpalette 彩色调色?<br />commandline 命o?<br />commandprompt 命o提示W?<br />compressedfile 压羃文g <br />configuresaharddiskforusewithmsdos 配置盘,以ؓ MS-DOS 所?<br />conventionalmemory 常规内存 <br />copiesdirectoriesandsubdirectorie***ceptemptyones 拯目录和子目录,I的除外 <br />copiesfileswiththearchiveattributeset 拯讄了归档属性的文g <br />copiesoneormorefilestoanotherlocation 把文件拷贝或搬移臛_一地方 <br />copiesthecontentsofonefloppydisktoanother 把一个Y盘的内容拯到另一个Y盘上 <br />copydiskette 复制盘 <br />copymovecompfindrenamedeletevervieweditattribwordpprintlist C拯MUd O?F搜烦R改名 D删除 V版本 E览A属?W写字 P打印 L列表 <br />copyrightc 版权(c <br />createdospartitionorlogicaldosdrive 创徏DOS分区或逻辑DOS驱动?<br />createextendeddospartition 创徏扩展DOS分区 <br />createlogicaldosdrivesintheextendeddospartition 在扩展DOS分区中创建逻辑DOS驱动?<br />createprimarydospartition 创徏DOSd?<br />createsadirectory 创徏一个目?<br />createschangesordeletesthevolumelabelofadisk 创徏,改变或删除磁盘的h <br />currentfile 当前文g <br />currentfixeddiskdrive 当前盘驱动?<br />currentsettings 当前讄 <br />currenttime 当前旉 <br />cursorposition 光标位置 <br />defrag 整理片 <br />dele 删去 <br />deletepartitionorlogicaldosdrive 删除分区或逻辑DOS驱动?<br />deletesadirectoryandallthesubdirectoriesandfilesinit 删除一个目录和所有的子目录及其中的所有文?<br />deltree 删除?<br />devicedriver 讑֤驱动E序 <br />dialogbox 对话?<br />directionkeys 方向?<br />directly 直接?<br />directorylistargument 目录昄变量 <br />directoryof 目录清单 <br />directorystructure 目录l构 <br />diskaccess 盘存取 <br />diskcopy 盘拯 <br />diskservicescopycomparefindrenameverifyvieweditmaplocateinitialize 盘服务功能: C拯 O比较 F搜烦R改卷名V校验 览E~缉M?L找文?N格式?<br />diskspace 盘I间 <br />displayfile 昄文g <br />displayoptions 昄选项 <br />displaypartitioninFORMation 昄分区信息 <br />displaysfilesinspecifieddirectoryandallsubdirectories 昄指定目录和所有目录下的文?<br />displaysfileswithspecifiedattributes 昄指定属性的文g <br />displaysorchangesfileattributes 昄或改变文件属?<br />displaysorsetsthedate 昄或设备日?<br />displayssetupscreensinmonochromeinsteadofcolor 以单色而非彩色昄安装屏信?<br />displaystheamountofusedandfreememoryinyoursystem 昄pȝ中已用和未用的内存数?<br />displaysthefullpathandnameofeveryfileonthedisk 昄盘上所有文件的完整路径和名U?<br />displaysthenameoforchangesthecurrentdirectory 昄或改变当前目?<br />doctor ȝ <br />doesn ?<br />doesntchangetheattribute 不要改变属?<br />dosshell DOS 外壳 <br />doubleclick 双击 <br />doyouwanttodisplaythelogicaldriveinFORMationyn 你想昄逻辑驱动器信息吗(y/n)? <br />driveletter 驱动器名 <br />editmenu ~辑选单 <br />emsmemory ems内存 <br />endoffile 文g?<br />endofline 行尾 <br />enterchoice 输入选择 <br />entiredisk 转换盘 <br />environmentvariable 环境变量 <br />esc esc <br />everyfileandsubdirectory 所有的文g和子目录 <br />existingdestinationfile 已存在的目录文g?<br />expandedmemory 扩充内存 <br />expandtabs 扩充标签 <br />explicitly 明确?<br />extendedmemory 扩展内存 <br />fastest 最快的 <br />fatfilesystem fat 文gpȝ <br />fdiskoptions fdisk选项 <br />fileattributes 文g属?<br />fileFORMat 文g格式 <br />filefunctions 文g功能 <br />fileselection 文g选择 <br />fileselectionargument 文g选择变元 <br />filesin 文g?<br />filesinsubdir 子目录中文g <br />fileslisted 列出文g <br />filespec 文g说明 <br />filespecification 文g标识 <br />filesselected 选中文g <br />findfile 文g查寻 <br />fixeddisk 盘 <br />fixeddisksetupprogram 盘安装E序 <br />fixeserrorsonthedisk 解决盘错误 <br />floppydisk 软盘 <br />FORMatdiskette 格式化磁?<br />FORMatsadiskforusewithmsdos 格式化用于MS-DOS的磁?<br />FORMfeed q纸 <br />freememory 闲置内存 <br />fullscreen 全屏q?<br />functionprocedure 函数q程 <br />graphical 图解?<br />graphicslibrary 囑Ş?<br />groupdirectoriesfirst 先显C目录组 <br />hangup 挂断 <br />harddisk 盘 <br />hardwaredetection g?<br />hasbeen 已经 <br />helpfile 帮助文g <br />helpindex 帮助索引 <br />helpinFORMation 帮助信息 <br />helppath 帮助路径 <br />helpscreen 帮助?<br />helptext 帮助说明 <br />helptopics 帮助主题 <br />helpwindow 帮助H口 <br />hiddenfile 隐含文g <br />hiddenfileattribute 隐含文g属?<br />hiddenfiles 隐含文g <br />howto 操作方式 <br />ignorecase 忽略大小?<br />inbothconventionalanduppermemory 在常规和上位内存 <br />incorrectdos 不正的DOS <br />incorrectdosversion DOS 版本不正?<br />indicatesabinaryfile 表示是一个二q制文g <br />indicatesanasciitextfile 表示是一个ascii文本文g <br />insertmode 插入方式 <br />insteadofusingchkdsktryusingscandisk Lscandisk,不要用chkdsk <br />inuse 在?<br />invaliddirectory 无效的目?<br />is ?<br />kbytes 千字?<br />keyboardtype 键盘cd <br />labeldisk 标注盘 <br />laptop 膝上 <br />largestexecutableprogram 最大可执行E序 <br />largestmemoryblockavailable 最大内存块可用 <br />lefthanded 左手习惯 <br />leftmargin 左边?<br />linenumber 行号 <br />linenumbers 行号 <br />linespacing 行间?<br />listbyfilesinsortedorder 按指定顺序显C文?<br />listfile 列表文g <br />listof 清单 <br />locatefile 文g定位 <br />lookat 查看 <br />lookup 查找 <br />macroname 宏名?<br />makedirectory 创徏目录 <br />memoryinfo 内存信息 <br />memorymodel 内存模式 <br />menubar 菜单?<br />menucommand 菜单命o <br />menus 菜单 <br />messagewindow 信息H口 <br />microsoft 微Y <br />microsoftantivirus 微Y反病毒Y?<br />microsoftcorporation 微Y公司 <br />mini 的 <br />modemsetup 调制解调器安?<br />modulename 模块?<br />monitor mode 监控状?<br />monochromemonitor 单色监视?<br />move to U至 <br />multi ?<br />newdata 新徏数据 <br />newer 更新?<br />newfile 新文?<br />newname 新名U?<br />newwindow 新徏H口 <br />norton norton <br />nostack 栈未定义 <br />noteusedeltreecautiously 注意:心使用deltree <br />onlinehelp 联机求助 <br />optionally 可选择?<br />or ?<br />pageframe 面 <br />pagelength 长 <br />pausesaftereachscreenfulofinFORMation 在显C每屏信息后暂停一?<br />pctools pc工具 <br />postscript 附言 <br />prefixmeaningnot 前缀意即\"?<br />prefixtoreverseorder 反向昄的前~ <br />presetswitchesbyprefixinganyswitchwithhyphenforexamplew 用前~和放在短横线-后的开?例如/-w)预置开?<br />pressakeytoresume 按一键l?<br />pressanykeyforfilefunctions 敲Q意键执行文g功能 <br />pressentertokeepthesamedate 敲回车以保持相同的日?<br />pressentertokeepthesametime 敲回车以保持相同的时?<br />pressesctocontinue 敲escl箋 <br />pressesctoexit ?lt;esc>键退?<br />pressesctoexitfdisk 敲esc退出fdisk <br />pressesctoreturntofdiskoptions 敲escq回fdisk选项 <br />previously 在以?<br />printall 全部打印 <br />printdevice 打印讑֤ <br />printerport 打印机端?<br />processesfilesinalldirectoriesinthespecifiedpath 在指定的路径下处理所有目录下的文?<br />programfile E序文g <br />programmingenvironment E序设计环境 <br />promptsyoubeforecreatingeachdestinationfile 在创建每个目标文件时提醒?<br />promptsyoutopressakeybeforecopying 在拷贝前提示你敲一下键 <br />pulldown 下拉 <br />pulldownmenus 下拉式选单 <br />quickFORMat 快速格式化 <br />quickview 快速查?<br />readonlyfile 只读文g <br />readonlyfileattribute 只读文g属?<br />readonlyfiles 只读文g <br />readonlymode 只读方式 <br />redial 重拨 <br />repeatlastfind 重复上次查找 <br />reportfile 报表文g <br />resize 调整大小 <br />respectively 分别?<br />rightmargin 双?<br />rootdirectory 根目?<br />runsdebugaprogramtestingandeditingtool q行debug, 它是一个测试和~辑工具 <br />runtimeerror q行时出?<br />save all 全部保存 <br />save as 另存?<br />scandisk 盘扫描E序 <br />scandiskcanreliablydetect scandisk可以可靠地发?<br />screencolors 屏幕色彩 <br />screenoptions 屏幕任选项 <br />screensaver 屏幕暂存?<br />screensavers 屏幕保护E序 <br />screensize 屏幕大小 <br />scrollbars d?<br />scrolllockoff 滚屏已锁?<br />searchfor 搜烦 <br />sectorspertrack 每道扇区?<br />selectgroup 选定l?<br />selectionbar 选择?<br />setactivepartition 讄zd分区 <br />setupoptions 安装选项 <br />shortcutkeys 快捷?<br />showclipboard 昄剪脓?<br />singleside 单面 <br />sizemove 大小/Ud <br />sorthelp S排序H帮助 <br />sortorder 序</span> <img src ="http://www.aygfsteel.com/xyang/aggbug/73668.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/xyang/" target="_blank">xyang</a> 2006-10-07 21:22 <a href="http://www.aygfsteel.com/xyang/archive/2006/10/07/73668.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HashMap与Hashtable的区?/title><link>http://www.aygfsteel.com/xyang/archive/2006/09/30/73090.html</link><dc:creator>xyang</dc:creator><author>xyang</author><pubDate>Sat, 30 Sep 2006 13:44:00 GMT</pubDate><guid>http://www.aygfsteel.com/xyang/archive/2006/09/30/73090.html</guid><wfw:comment>http://www.aygfsteel.com/xyang/comments/73090.html</wfw:comment><comments>http://www.aygfsteel.com/xyang/archive/2006/09/30/73090.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/xyang/comments/commentRss/73090.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/xyang/services/trackbacks/73090.html</trackback:ping><description><![CDATA[ <font size="2">HashTable的应用非常广泛,HashMap是新框架中用来代替HashTable的类Q也是说徏议用HashMapQ不要用HashTable。可能你觉得HashTable很好用,Z么不用呢Q这里简单分析他们的区别。?br />1.HashTable的方法是同步的,HashMap未经同步Q所以在多线E场合要手动同步HashMapq个区别像Vector和ArrayList一栗?br /><br />2.HashTable不允许null?key和value都不可以),HashMap允许null?key和value都可??br /><br />3.HashTable有一个contains(Object value)Q功能和containsValue(Object value)功能一栗?br /><br />4.HashTable使用EnumerationQHashMap使用Iterator?br /><br />以上只是表面的不同,它们的实C有很大的不同?br /><br />5.HashTable中hash数组默认大小?1Q增加的方式是 old*2+1。HashMap中hash数组的默认大是16Q而且一定是2的指数?br /><br />6.哈希值的使用不同QHashTable直接使用对象的hashCodeQ代码是q样的:<br />int hash = key.hashCode();<br />int index = (hash & 0x7FFFFFFF) % tab.length;<br />而HashMap重新计算hash|而且用与代替求模Q?br />int hash = hash(k);<br />int i = indexFor(hash, table.length);<br /><br />static int hash(Object x) {<br />  int h = x.hashCode();<br /><br />  h += ~(h << 9);<br />  h ^= (h >>> 14);<br />  h += (h << 4);<br />  h ^= (h >>> 10);<br />  return h;<br />}<br />static int indexFor(int h, int length) {<br />  return h & (length-1);<br />}<br />以上只是一些比较突出的区别Q当然他们的实现上还是有很多不同的,比如<br />HashMap对null的操?/font> <img src ="http://www.aygfsteel.com/xyang/aggbug/73090.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/xyang/" target="_blank">xyang</a> 2006-09-30 21:44 <a href="http://www.aygfsteel.com/xyang/archive/2006/09/30/73090.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>test codehttp://www.aygfsteel.com/xyang/archive/2006/09/28/72559.htmlxyangxyangThu, 28 Sep 2006 05:42:00 GMThttp://www.aygfsteel.com/xyang/archive/2006/09/28/72559.htmlhttp://www.aygfsteel.com/xyang/comments/72559.htmlhttp://www.aygfsteel.com/xyang/archive/2006/09/28/72559.html#Feedback0http://www.aygfsteel.com/xyang/comments/commentRss/72559.htmlhttp://www.aygfsteel.com/xyang/services/trackbacks/72559.html  1 public   class  hello  {
 2      public   static   void  main(String a[])  throws  java.io.IOException  {
 3         String tmp  =   " 中文 "
 4         printHex(tmp, " Unicode " );
 5         printHex(tmp, " GB2312 " );
 6         printHex(tmp, " ISO8859-1 " );
 7         printHex(tmp, " UTF-8 " );
 8     }

 9
10      private   static   void  printHex(String str,String charset)  throws  java.io.IOException  {
11          byte [] buf  =  str.getBytes(charset);
12          for  ( int  i  =   0 ; i  <  buf.length; i ++ {
13             System.out.print(Integer.toHexString(buf[i]));
14             System.out.print( "   " );
15         }

16         System.out.println( "   " );
17     }

18
19 }


xyang 2006-09-28 13:42 发表评论
]]>
字符~码http://www.aygfsteel.com/xyang/archive/2006/09/28/72511.htmlxyangxyangThu, 28 Sep 2006 03:36:00 GMThttp://www.aygfsteel.com/xyang/archive/2006/09/28/72511.htmlhttp://www.aygfsteel.com/xyang/comments/72511.htmlhttp://www.aygfsteel.com/xyang/archive/2006/09/28/72511.html#Feedback0http://www.aygfsteel.com/xyang/comments/commentRss/72511.htmlhttp://www.aygfsteel.com/xyang/services/trackbacks/72511.html
[概述]
      计算Z的一切都是以数字来表C的Q字W同样如此。字W编码就是将字符集编码成为数字序列,以便能让计算别。各个地区和国家使用的语a有别Q将本地使用的语aW号q行~码得到本地编码字W集。例如西Ƨ国家用的本地~码是ISO8859-1Q中国大陆和新加坡等地区使用本地~码是GB2312或GBKQ中国港台地Z用的本地~码是BIG5Q韩国和日本的本地编码分别是euc-kr和Shift_JIS。电脑的操作pȝ支持各种本地~码字符集,操作pȝ默认的本地编码和你所安装的操作系l语a版本是一致的。本地集只对本地使用的文字符可行了~码Qƈ不包括其他地Z用的文字Q即使两个本地集中包含了相同的字W,q个字符的编码g是不同的。例如“中”的GB2312或GBK~码gؓ?xD6D0”,而BIG5~码gؓ?xA4A4”?br />      全球信息交流与融合的势要求实现Ҏ地字W集的统一Q?984q?月ISO成立了工作组Q针对各国文字、符可行统一~码Q这U编码成为Unicode。Unicode?992q?月通过DIS(DrafInternationalStandard)QV2.0版本?996q发布。Unicode~码包括了符?811个、汉?0902个、韩?1172个、等{。Unicode虽然实现了全球统一~码Q但是在字符集数量和~码效率斚w昄存在着不Q而UTF-8、UTF-16是针对Unicode~码q行转换或扩充Ş成的~码QUTF是Unicode Translation Format的羃写?/font>
 
[l节]
关于ASCII~码
      ASCII~码是美国标准信息交换码Q这U编码方式针对的是英文字W。ASCII~码使用一个字节对字符q行~码Q而且字节的最高位都ؓ0Q因此ASCII~码的字W集大小?28个。由于英文字母仅?6个,再加上其他一些常用符Pd也不会过128个,因此ASCII~码的空间是_的。例如,字符“a”被~码?x61Q字W“b”被~码?x62{等。注意,在有的时候ASCII泛指本地~码Q例如文本编辑器UltraEdit中有诸如“ASCII转Unicode”的功能Q这里的ASCII泛指本地编码,如果本地~码是GBKQ这个功能执行的是GBK~码到Unicode~码的{换?/font>
 
关于ISO8859-1~码
      ISO8859-1是西Ƨ语pd安用的字W集~码QISO8859-1使用一个字节对字符q行~码Q编码D围是0x00-0xFF。其中,0x00-0x1F用作控制字,0x20-0x7F表示字母、数字和W号q些囑Ş字符Q?xA0-0xFF作ؓ附加部分使用。由于ASCII~码只用了一个字节中的低7位,~码范围仅ؓ0-127Q虽然可以容U文字W和其他的一些符P但是却不能包含除英文以外的其他西Ƨ语a的字母,因此ASCII~码在西Ƨ国家ƈ不通用。针对这个问题ISO在ASCII~码的基上进行了扩充Q制定了ISO8859-1~码QISO8859-1~码使用了一个字节的全部8位,~码范围?-255Q能包含西欧语系的所有字母和W号?/font>
 
关于GB2312、GBK和BIG5~码
      GB2312码是中华人民共和国国家汉字信息交换用码Q全U《信息交换用汉字编码字W集Q基本集》,由国家标准d发布Q?981q??日实施,中国大陆和新加坡{地使用此编码。GB2312收录了简化汉字、符受字母、日文假名等p7445个字W,其中汉字?763个。GB2312代码表分区94个区(0xA1-0xFE)Q对应第一个字节,每个?4个位(0xA1-0xFE)Q对应了W二字节Q两个字节的值分别ؓ区号的值和位号的值加32(0x20)Q因此也被称为区位码。GB2312的编码范7围是0x2121-0x777EQ与ASCII有重叠,通常Ҏ是将GB码的两个字节的最高位|?区别?br />      GBK是GB2312-80的扩展,向上兼容Q包含了20902个汉字,~码范围?x8140-0xFEFEQ剔除高?x80的字位,其他字符都可以一一映射到Unicode2.0。GB18030-2000(GBK2K)在GBK的基上增加了藏、蒙{少数民族的字符QGBK2K从根本上解决了字位不够、字形不的问题。GBK2K首先要求实现能够完全映射到Unicode3.0标准的所有字形,现在q没有Q何一个操作系l支持GBK2K?br />      BIG5码被UCؓ大五码,是中国港台地Z用的字符~码方式。TW-BIG5码将所有字分ؓ两大,卛_用字区和ơ常用字区,每个字区分都采用W画排序Q同W画的字依部首排序。TW-BIG5每个字由两个字节l成Q第一个字节编码范围是0xA1-0xF9Q第二个字节~码范围?x40-0x7E?xA1-0xFEQ共计收?3868个字Q其中包?401个常用字?652个次常用字?个扩充字、以?08个其他符受?/font>
 
关于Unicode~码
      ISOQ国际化标准l织Q将全世界所有的W号q行l一~码Q称为Unicode~码。Unicode~码的字W占用两个字W的大小Q对于ASCII码表C的字符QUnicode只是单的在ASCII码原来的一个字节码g增加一个所有位全ؓ0的字节。Unicode使用两个字节~码Q因此能表示的字W集最大ؓ65536Q另外Unicode中还保留两千多个数值未用于字符~码。由于Unicode~码的空间有限,只能包含各个地区常用的字W而非所有字W,因此Q在相当长的一D|间里Q本地化字符~码和Unicode~码共存?/font>
 
关于UTF-8和UTF-16~码
      UTF-8和UTF-16~码仍然属于Unicode~码Q它们是在Unicode~码基础上进行了转换或扩展。例如在Windows XP?000操作pȝ中,Unicode~码指的是UTF-16~码?br />      UTF-8~码是将Unicode~码中不同范围的字符采用不同的字节进行编码,对于ASCII~码的字W仍使用一个字节进行编码,UTF-8~码完全兼容ASCII~码。与Unicodex较,UTF-8~码使得英文文档的占用空间减了一半,因此UTF-8颇受ppd家的青睐。除此之外,UTF-8~码中不会出现gؓ0x0000的数据,q样避免了和某些E序语言产生冲突Q而UTF-8~码的补充位使得数据能够被方便的出传输q程中是否发生错误。通常QUTF-8~码都用“EF BB BF”三个字节数据作为文件开头?/font>

      Unicode~码和UTF-8~码l构的对应关pd下:
        Unicode~码值                       ?UTF-8~码l构
        \u0001 - \u007E                      0XXXXXXX
        \u0080 - \u07FF ?\u0000       110XXXXX 10XXXXXX
        \u0800 - \uFFFF                      1110XXXX 10XXXXXX 10XXXXXX
 
      Unicode~码与UTF-8~码的{换如?U8代表UTF-8~码QU代表Unicode~码)Q?br />      1) 位于Unicode~码I间 \u0001-\u007F之间的字W(即编码用位于8位的字符Q,UTF-8采用一个字节对q些字符q行~码。直接将Unicode~码的低位取出就得到了UTF-8~码。{换过E可表示为:U8 = (byte)U?br />      2) 位于Unicode~码I间\u0080-\u07FF之间的字W以及\u0000表示的字W(即编码用位?-11位的字符Q以及空字符Q,UTF-8采用两个字节对这些字W进行编码。这时候,Unicode~码转换为UTF-8~码的方法是Q将Unicode~码的低6位取出,在前面补充?0”作Z字节Q将7-11位取出,在前面补充?10”作为高字节。{换过E可表示为:U8 = [(byte)(0xC0 | (0x01F & (U>>6)),(byte)(0x80 | (0x3F & U)]?br />      3) 位于Unicode~码I间\u080-\uFFFF之间的字W(即编码用位?2-16位的字符Q,UTF-8采用三个字节对这些字W进行编码。这时候,Unicode~码转换为UTF-8~码的方法是Q将Unicode~码的低6位取出,在前面补充?0”作Z字节Q将7-12位取出,在前面补充?0”作Z字节Q将13-16位取出,在前面补充?110”作为高字节。{换过E可表示为:U8 = [(byte)(0xE0 | (0x0F & (U>>12))),(byte)(0x80 | (0x03F & (U>>6)),(byte)(0x80 | (0x3F & U)]?/font>
 
      UTF-16~码在Unicode基础上进行了一些细节上的扩充,增加了对Unicode~码没有包括的字W的表示方式。UTF-16对Unicode的扩充ƈ没有影响Unicode~码中的原有字符Q容易看出Unicode是UTF-16的子集。Unicode~码?xD800-0xDFFF区间的数g留,被称Z理区_区间共包?048个数|其中0xD800-0xD6FF是高半代理区Q?xDC00-0xDFFF是低半代理区。UTF-16~码是在Unicode~码基础上利用代理区扩充字符~码的机制。UTF-16~码从两个区域分别取一个编码,l成一?字节的代理对来表CZ个编码字W,p够在Unicode基础上扩充了1024*1024个字W。UTF-16_用来~码全球的所有字W,微Y从Windows2000开始支持UTF-16~码?/font>
 
关于Little-Endian和Big-Endian
      在不同体pȝ计算机系l中Q编码的Unicode字符在内存中存储的顺序是不同的。用Inter生的CPU的计机Q内存中数据存储通常是低字节在前Q高字节在后Q这U存储方式被UCؓLittle-Endian。在对于一些计机Q内存中数据存储通常是高字节在前Q低字节在后Q这U存储方式被UCؓBig-Endian?br />      UTF-16~码的文仉常在文件开头用字符标志Z用的存储方式Q若文g开头是?xFF 0xFF”,表示文g其余部分是Little-Endian?UTF-16~码Q若文g开头是?xFE 0xFF”,表示文g其余部分是Big-Endian?UTF-16~码?/font>


xyang 2006-09-28 11:36 发表评论
]]>
字符~码应用的一个奇怪现?/title><link>http://www.aygfsteel.com/xyang/archive/2006/09/28/72510.html</link><dc:creator>xyang</dc:creator><author>xyang</author><pubDate>Thu, 28 Sep 2006 03:36:00 GMT</pubDate><guid>http://www.aygfsteel.com/xyang/archive/2006/09/28/72510.html</guid><wfw:comment>http://www.aygfsteel.com/xyang/comments/72510.html</wfw:comment><comments>http://www.aygfsteel.com/xyang/archive/2006/09/28/72510.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/xyang/comments/commentRss/72510.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/xyang/services/trackbacks/72510.html</trackback:ping><description><![CDATA[ <div>[概述] </div> <div>      在Windows操作pȝ中用记事本新徏一个文本文Ӟ在文仉面写入“联通”两个字q保存。当再次打开q个文本文g时候,在记事本中看到得却不是刚刚输入的“联通”,而是q。网l上有h把这个奇怪现象包装成把戏Q如果你N到过q种把戏׃知道Q他们往往让你建立两个文本文gq行ҎQ其中一个输入“联通”,另外一个可能是“移动”等{,最后试囑օ卦地让你怿联通、移动和微Y之间有着U种恩怨情仇?/div> <div> <br />[解释]</div> <div>      q是一个字W编码应用的奇怪现象,讲的明白点,可以说是C本开差了!C本ؓ什么会犯错误?C本犯了怎样的错误呢Q也怽会迫不及待的想知道这些问题,如果是这P我不会让你空腹而归的?br />      在简体中文操作系l中默认的本地字W集~码是GBK~码Q除非你在保存记事本文本文g时候选择了其他编码方式,否则用记事本录入的字W信息将使用GBK~码q行储存。y合的是,“联通”这两个字符的GBK~码hUTF-8~码的特征,C本犯下的错误正是GBK~码存放的记录有“联通”两个字W的文g误认为UTF-8~码的文件。或怽会问QUTF-8~码的文件不是以“EF BB BF”三个特D字节开头吗Q既然这PC本怎么会犯q么低的错误呢Q没错,UTF-8~码规定使用UTF-8~码的文件以“EF BB BF”三个特D字节开_但ƈ不是强制性要求,早期的UTF-8~码文g׃遵@q个规定。因此记事本不能依靠文g的开头字节判断一个文件是否是UTF-8~码Q而只能对文g中的数据q行单的~码分析来确定。正是这个原因,才有了字W编码应用中的这个奇怪又无法避免的现象?/div> <div> <br />[l节] </div> <div>      如果上面的解释对于你来说只是杯开胃红酒,那我q是块点把主食呈上吧Q一份大峡谷香烤猪肋排。UTF-8~码采用1-3个字节对字符q行~码Q编码字节数与字W的Unicode~码值有严格的对应关p,让我们回忆下UTF-8~码和Unicode的对应关pd?/div> <div> <br />      Unicode~码值                           ? UTF-8~码l构<br />      \u0001 - \u007E                           0XXXXXXX<br />      \u0080 - \u07FF ?\u0000            <font color="#ff6600">110</font>XXXXX <font color="#ff6600">10</font>XXXXXX<br />      \u0800 - \uFFFF                            <font color="#ff6600">1110</font>XXXX <font color="#ff6600">10</font>XXXXXX <font color="#ff6600">10</font>XXXXXX</div> <div> <br />      “联通”这两个字符的GBK~码值是“C1 AA CD A8"QGBK~码方式使用两个字节对一个字W进行编码,因此以GBK~码方式存放的录有“联通”两个字W的文g的大ؓ四个字节。接下来分别观察“联通”这两个字符GBK~码值的二进制Ş式,你有发现有趣的事?/div> <div> <br />      联  ?GBK    十六q制QC1 AA    二进Ӟ<font color="#ff6600">110</font>0 0001,<font color="#ff6600">10</font>10 1010<br />      通  ?GBK    十六q制QC1 AA    二进Ӟ<font color="#ff6600">110</font>0 1101,<font color="#ff6600">10</font>10 1000</div> <div> <br />      h意上面二q制数据的着色部分,你想C什么?对,它们和UTF-8~码l构中的补充位完全一_UTF-8~码的补充位使得~码值更有规律,而记事本刚好凭借这个特征区分UTF-8~码的文件。存有“联通”两个字W的文g的所有数据都W合q个特征Q就是这PC本彻底的文件误认ؓUTF-8~码的文件?br />      错错Q让我们来看看这个错误是怎样收场的。如果把“联通”的GBK~码值当作UTF-8~码|那文件就成ؓ一个写有数据“C1 AA CD A8”ƈ以UTF-8~码的文Ӟ当用记事本再次打开的时候会看到什么呢Q只要将UTF-8~码转换成Unicode~码q道了。UTF-8~码“C1 AA CD A8”{换成Unicode~码后,~码gؓ?A 00 68 03”(转换Ҏ请参考本Blog中的《字W编码》一文)?x006Aq个Unicode~码g于\u0001 - \u007E之间Q若要{换ؓUTF-8~码Q显然只能用一个字节进行编码,因此“联”的GBK~码“C1 AA”虽然特征上貌似UTF-8~码Q但它却不对应Q何一个UTF-8~码。接着?x0368q个Unicode~码|q个值对应了字符“ͨ”,q也正是我们在C本中看到的内宏V或怽会说我看到的是一个黑色矩形啊Q这只是字体的原因,你将字体改ؓ宋体或者其他字体,看到的就是字W“ͨ”?br />      对于中文字符QUTF-8~码要用三个字节q行~码Q因此,如果你用记事本录入“联通”,然后选择以UTF-8~码方式保存的话Q文件大应?个字节(包含三个字节的开头数据)Q而同L文gGBK~码却是4个字节。最后附上“联通”的GBK、UTF-8、Unicode~码|以及C本的错误思维?/div> <div> <br />      联通  GBK  C1 AA CD A8    UTF-8  E8 81 94 E9 80 9A    Unicode  54 80 1A 90<br />      联通?GBK  C1 AA CD A8    UTF-8  C1 AA CD A8            Unicode  6A 00 68 03  Q将GBKD认ؓUTF-8值的l果Q?/div> <img src ="http://www.aygfsteel.com/xyang/aggbug/72510.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/xyang/" target="_blank">xyang</a> 2006-09-28 11:36 <a href="http://www.aygfsteel.com/xyang/archive/2006/09/28/72510.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>字符~码在编E中的问?/title><link>http://www.aygfsteel.com/xyang/archive/2006/09/28/72509.html</link><dc:creator>xyang</dc:creator><author>xyang</author><pubDate>Thu, 28 Sep 2006 03:35:00 GMT</pubDate><guid>http://www.aygfsteel.com/xyang/archive/2006/09/28/72509.html</guid><wfw:comment>http://www.aygfsteel.com/xyang/comments/72509.html</wfw:comment><comments>http://www.aygfsteel.com/xyang/archive/2006/09/28/72509.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/xyang/comments/commentRss/72509.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/xyang/services/trackbacks/72509.html</trackback:ping><description><![CDATA[ <div> <font size="2">[概述] </font> </div> <div> <font size="2">      在编E中字符~码l对是个值得重视的问题,当读取一个文件或是得C个输入流Q你需要分析数据的~码方式、Ş态,以便能正的处理、显C数据所表示的字W?/font> </div> <div> <br /> <font size="2">[l节]<br />      1)  在简体中文操作系l中Q从键盘输入的原始字W采用的是GBK~码方式Q对应到其他操作pȝQ采用的应是pȝ默认的本地字W集。而在E序设计语言中,字符和字W串则通常是用Unicode~码方式Q这一点可以用下列代码说明Q用Java语言描述Q?/font> </div> <div> <br /> <font size="2">      int ch = System.in.read(); //从键盘输入中d一个字节的数据<br />      如果输入“中国”两个字W,使用上面的代码将所有的数据dQ将得到“D6 D0 B9 FA”,q写数据正是“中国”两个字W的GBK~码倹{?br />      String tmp = "中国"; //定义字符串ƈ赋?br />      for(int i=0;i<tmp.length();i++)<br />      {<br />      //字W串中的每个字符~码g十六q制形式昄<br />         System.out.println(Integer.toHexString(ch));<br />      }</font> </div> <div> <br /> <font size="2">      上面代码最后显C的内容是?E2D 56FD”,而这正是“中国”两个字W的Unicode~码倹{?/font> </div> <div> <font size="2"> </font> </div> <div> <font size="2">      2) 不仅是输入的原始字符采用GBK~码Q屏q输出的最l数据也要采用GBK~码Q下面的代码能说明问题?/font> </div> <div> <br /> <font size="2">      String tmp = "中国"; //定义字符串ƈ赋?br />      System.out.println(tmp); //字W串tmp输出到显C屏</font> </div> <div> <br /> <font size="2">      代码q行后,在显C屏上显然能看到“中国”两个字W,而字W串tmp分明是采用Unicodeq行~码的,是不是刚才提出的命题站不住脚呢?其实Q在调用println()Ҏ后,该方法自动的字W串tmp的编码方式从Unicode转换成了本地~码GBKQ这h能在屏幕上正常的昄中文。如果你仍然怀疑,Ll往下看?/font> </div> <div> <br /> <font size="2">      byte [] buf1 = tmp.getBytes("Unicode"); //字W串tmp以Unicode~码方式储存在字节数l中<br />      byte [] buf2 = tmp.getBytes("GB2312"); //字W串tmp以UGBK~码方式储存在字节数l中<br />      //在屏q输出流中直接写字节数组<br />      System.out.write(buf1);<br />      System.out.write(buf2);</font> </div> <div> <br /> <font size="2">      q样的作法将会得C么结果呢Q结果也怼令你感到惊讶Qbuf1的数据输出后昄Zؕ码,而buf2的数据输出后赫然昄为“中国”两个字W。可以把命题说得明确点:如果要在屏幕上输出汉字,那么字符的最l编码方式必LGBK~码方式。对于数字和英文字母Q以及ASCII~码集中包含的符P字符的最l编码方式可以是ASCIIQ这U情况下如果使用Unicode~码Q那么显C的l果会是q样? 2 3 a b c ”,本来xC的内容是?23abc”。显C结果字W间多了个貌似空格的字符Q这是因为ASCII~码使用一个字节,Unicode~码使用两个字节Q在ASCII~码转换为Unicode时候,只是单纯地在~码值前面补充一个全?的字节,q个字节在最l显C的时候被看做是空字符NUL?/font> </div> <div> <font size="2"> </font> </div> <div> <font size="2">      3) 在涉及网c网l流和关pL据库斚w~程的时候,字符~码dƢ戏弄编Eh员,不花心思去驯服它的l果是得到一堆ؕ码。例如在d数据数据时候,数据库中的内Ҏ中文字符Q如果数据库没有考虑C文支持问题就很容易得Cؕ码。再例如E序q行的^台默认编码ƈ非GBKQ在获取GBK~码的字W数据时候,E序会将数据看作默认~码Q这样也Ҏ产生q。在上述情况中编写程序的时候,应该耐心的分析数据的~码方式Q合理的~写代码防止q?/font> </div> <div> <font size="2"> </font> </div> <div> <font size="2">[例子]   <br />      记得在《Java手机E序设计入门与应用》(王森 ~著Q一书的W?3章-MIDP|络E序设计中有一D用HTTPq行|络q接的实例代码,部分代码如下所C?/font> </div> <div> <br /> <font size="2">      String url = "</font> <a > <font color="#028ea3" size="2">http://127.0.0.1/test.html</font> </a> <font size="2">";<br />      HttpConnection hc = (HttpConnection)Connector.open(url);<br />      DataInputStream dis = new DataInputStream(hc.openInputStream());<br />      String content = "";<br />      int ic;<br />      while((ic = dis.read()) != -1)<br />      {<br />          content += (char)ic;<br />      }<br />      Form f = new Form("HTTP Test");<br />      f.append(content);<br />      Display.getDisplay(this).setCurrent(f);</font> </div> <div> <br /> <font size="2">      q段代码让手机通过HTTP协议与网l中的主行通信Q然后获得网l主Z的文件test.htmlq将文g内容d到字W串变量?最后显C到E序H体中。如果程序这般执行的话,你会发现MIDlet昄出来中文都是q。作者称“之所以会有这U结果,原因在于我们的仿真器支持Unicode的缘故。”,作者的意思似乎是MIDlet本地编码的字符数据误认ZUnicode~码的数据,因此不能正常昄Q然后推荐了一U解x法:使用ASCII形态的Unicode?br />      所谓ASCII形态的Unicode指的是用ASCII~码的字W来表示Unicode~码|反过来说是Unicode的编码值看做字W,再用ASCII对这些字W进行编码存放。比如“中国”这两个字符的ASCII形态的Unicode~码字符为“\u4e2d\u56fd”,0x4E2D 0x56FD 分别为“中”和“国”的Unicode~码|编码g为字W,然后在前面添加“\u”标识符Q以便进行还原。再对这些字W进行ASCII~码得CASCII形态的Unicode~码|最l的gؓ?C 75 34 65 32 64 5C 75 35 36 66 64”,一?2个字节的数据Q分别对应了“\u4e2d\u56fd”中的一个字W。用jdk*\bin文g夹下的native2ascii.exeE序可以很方便的一个文件{换ؓASCII形态的Unicode~码。将文gtest.html转换形态后QMIDlet中需要再ơ将ASCII形态的Unicode转换为Unicode~码Q这个{换方法需要自己写Q最后MIDlet中显C出来的是正常的中文字W?/font> </div> <div> <br /> <font size="2">      在我看来Q那本书的作者没有把握住问题的真正原因,也或许是我们使用的模拟器和^C同。如果把握住真正的原因,问题的解x法就变得很简单了。前面说q,要在屏幕上显C出中文Q字W的最l编码Ş式必LGBKQ在中国大陆发现的手机都能显CZ文,也就说明手机中都支持GBK~码。那Z么会出现中文字符q的问题呢Q我的理由是手机中采用的默认~码是ISO8859-1Q对于从|络中读入的字符数据Q在没有指明的情况下QMIDlet一律将它们看作是ISO8859-1~码的数据。而test.html的编码方式是GBKQMIDlet犯了个错误,它将GBK~码的数据误认ؓ了ISO8859-1~码的数据,然后在显C的时候又q行了一ơISO8859-1到GBK的编码{换,q样的结果是数据遭到了破坏,昄出来的中文也变成了q?br />      把握住了原因Q解册v来就十分方便了。既然MIDletGBK~码的数据误认ؓISO8859-1~码的数据,那么我们只要在程序中指明数据的编码方式就可以了,而不用用“ASCII形态的Unicode”这L舍本求末的方法。下面是解决MIDlet|络q接中文q问题的代码,q些代码证明我的观炏V?/font> </div> <div> <br /> <font size="2">      http://127.0.0.1/test.html;<br />      HttpConnection hc = (HttpConnection)Connector.open(url);<br />      byte [] buf = new byte[1024];<br />      int len = hc.openInputStream().read(buf);  //d|络数据<br />      String content = new String(buf,0,len,"GB2312");  //指定数据为GBK~码<br />      Form f = new Form("HTTP Test");<br />      f.append(content); <br />      display.setCurrent(f);</font> </div> <div> <br /> <font size="2">      上述代码中关键的一句是Q?br />      String content = new String(buf,0,len,"GB2312");<br />      q句代码告诉MIDlet从网l中d的数据用的是GBK~码方式Q然后MIDlet便能争取处理和显C些数据?br />      如果这句代码改写ؓQ?br />      String content = new String(buf,0,len);<br />      或者是Q?br />      String content = new String(buf,0,len,"ISO8859-1");<br />      都将出现同样的中文ؕ码现象,由此断定错误的原因是手机默认~码使用ISO8859-1QMIDlet从|络中读取的GBK~码的数据误认成了ISO8859-1~码的数据?br /></font> </div> <img src ="http://www.aygfsteel.com/xyang/aggbug/72509.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/xyang/" target="_blank">xyang</a> 2006-09-28 11:35 <a href="http://www.aygfsteel.com/xyang/archive/2006/09/28/72509.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ӧ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̫</a>| <a href="http://" target="_blank">ϸ</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">¡</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͺ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͨ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ϴ</a>| <a href="http://" target="_blank">˳</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank">ϳ</a>| <a href="http://" target="_blank">ƶ</a>| <a href="http://" target="_blank">Ƽ</a>| <a href="http://" target="_blank">˳</a>| <a href="http://" target="_blank">ͨ</a>| <a href="http://" target="_blank">Ӧñر</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank">Զ</a>| <a href="http://" target="_blank">Ͽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ֺ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>