<?xml version="1.0" encoding="UTF-8"?>
  <feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html"><![CDATA[Kinroc's Blog - Development]]></title>
  <subtitle type="html"><![CDATA[追求美丽的梦想，品味精彩的人生！]]></subtitle>
  <id>http://www.kinroc.com/blog/</id>
  <link rel="alternate" type="text/html" href="http://www.kinroc.com/blog/" /> 
  <link rel="self" type="application/atom+xml" href="http://www.kinroc.com/blog/atom.asp" /> 
  <generator uri="http://www.pjhome.net/" version="2.8">PJBlog3</generator> 
  <updated>2009-12-16T03:58:27+08:00</updated>

  <entry>
	  <title type="html"><![CDATA[A3000移动版今日插件显示星期]]></title>
	  <author>
		 <name>kinroc</name>
		 <uri>http://www.kinroc.com/blog/</uri>
		 <email>kinroc@kinroc.com</email>
	  </author>
	  <category term="" scheme="http://www.kinroc.com/blog/default.asp?cateID=5" label="Development" /> 
	  <updated>2009-12-16T03:58:27+08:00</updated>
	  <published>2009-12-16T03:58:27+08:00</published>
		  <summary type="html"><![CDATA[<p><img alt="" align="right" width="96" height="140" style="margin-right: 10px" src="http://www.kinroc.com/blog//blog/uploadfiles/image/a3000.jpg" /></p>
<p><span style="font-size: 12px"><span style="font-family: Arial">移动版的今日插件可以显示星期啦，哈哈！不过联通版的不知道一样不，估计应该差不多！<br />
1.首先找到windows目录下的_application.xml，找到&lt;DateDataView hittable=&quot;false&quot; x=&quot;12&quot; y=&quot;30&quot; width=&quot;120&quot; height=&quot;16&quot; size=&quot;12&quot; dataProvider=&quot;dateTime&quot; /&gt;这一行，在这行下面<font color="#ff0000">新加一行</font>&lt;NumberDataView hittable=&quot;false&quot; x=&quot;106&quot; y=&quot;30&quot;&nbsp;&nbsp;width=&quot;25&quot; height=&quot;16&quot; numberResourceName=&quot;DayOfWeek&quot; digiCount=&quot;1&quot; dataProvider=&quot;dateTime&quot; dataKey=&quot;DAYOFWEEK&quot; /&gt;<br />
2.将附件中的CCI_Td01.tga复制到windows目录下替换！<br />
ok！重启吧，看看星期出来了吧，呵呵！<br />
就是在日期的后面加了个星期，就不截图了，<font color="#ff0000">显示格式为：十二月 16, 2009 （三）</font></span></span></p>
<p><span style="font-size: 12px"><span style="font-family: Arial"><font color="#ff0000"><a href="http://www.kinroc.com/blog/download.asp?id=10"><img border="0" alt="" style="margin: 0px 2px -4px 0px" src="http://www.kinroc.com/blog/images/download.gif" />点击下载此文件</a></font></span></span></p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.kinroc.com/blog/article/development/138.html" /> 
	  <id>http://www.kinroc.com/blog/default.asp?id=138</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[调用腾讯网站的天气预报]]></title>
	  <author>
		 <name>kinroc</name>
		 <uri>http://www.kinroc.com/blog/</uri>
		 <email>kinroc@kinroc.com</email>
	  </author>
	  <category term="" scheme="http://www.kinroc.com/blog/default.asp?cateID=5" label="Development" /> 
	  <updated>2009-01-20T09:46:48+08:00</updated>
	  <published>2009-01-20T09:46:48+08:00</published>
		  <summary type="html"><![CDATA[<p><code>以下是调用腾讯网站天气预告的代码，引用脚本在下面的附件中！</code></p>
<p><code>&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</a>&quot;&gt;<br />
&lt;html xmlns=&quot;<a href="http://www.w3.org/1999/xhtml">http://www.w3.org/1999/xhtml</a>&quot;&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;<br />
&lt;title&gt;天气&lt;/title&gt;<br />
&lt;/head&gt;</code></p>
<p><code>&lt;body&gt;<br />
&lt;style type=&quot;text/css&quot;&gt;<br />
#Wealth{line-height:18px;height:66px;padding-bottom:10px; float:left; cursor:pointer;width:207px; background:url(../images/info_18.gif) no-repeat 0px 5px;}<br />
&nbsp;#Wealth *{line-height:18px;}<br />
&nbsp;#Wealth h6{font-size:12px; margin:0 auto; padding-top:10px;}<br />
&nbsp;#Wealth span.img{float:left;display:block;padding-top:8px}<br />
&nbsp;#Wealth p{float:left;margin:0;padding:0; height:0px;}<br />
&nbsp;#Wealth div{font-size:12px;width:100px;}<br />
&lt;/style&gt;<br />
&lt;script language=&quot;javascript&quot;&gt;<br />
function loadPng(o){<br />
&nbsp;if(MiniSite.Browser.ie){<br />
&nbsp;&nbsp;try{<br />
&nbsp;&nbsp;&nbsp;var img = o;<br />
&nbsp;&nbsp;&nbsp;var imgName = o.src.toUpperCase();<br />
&nbsp;&nbsp;&nbsp;if (imgName.substring(imgName.length-3, imgName.length) == &quot;PNG&quot;){<br />
&nbsp;&nbsp;&nbsp;&nbsp;var imgID = (img.id) ? &quot;id='&quot; + img.id + &quot;' &quot; : &quot;&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;var imgClass = (img.className) ? &quot;class='&quot; + img.className + &quot;' &quot; : &quot;&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;var imgTitle = (img.title) ? &quot;title='&quot; + img.title + &quot;' &quot; : &quot;title='&quot; + img.alt + &quot;' &quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;var imgStyle = &quot;display:inline-block;&quot; + img.style.cssText;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (img.align == &quot;left&quot;) imgStyle = &quot;float:left;&quot; + imgStyle;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (img.align == &quot;right&quot;) imgStyle = &quot;float:right;&quot; + imgStyle;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (img.parentElement.href) imgStyle = &quot;cursor:hand;&quot; + imgStyle ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;var strNewHTML = &quot;&lt;span &quot; + imgID + imgClass + imgTitle + &quot; style=\&quot;&quot; + &quot;width:&quot; + img.width + &quot;px; height:&quot; + img.height + &quot;px;&quot; + imgStyle + &quot;;&quot; + &quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader&quot; + &quot;(src=\'&quot; + img.src + &quot;\', sizingMethod='image');\&quot;&gt;&lt;/span&gt;&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;img.outerHTML = strNewHTML;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}catch (e){}<br />
&nbsp;}<br />
}<br />
&lt;/script&gt;<br />
&lt;script type=&quot;text/javascript&quot; src=&quot;j.soso.weather_utf8.js&quot;&gt;&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;div id=&quot;Wealth&quot;&gt;&lt;/div&gt;<br />
&lt;script type=&quot;text/javascript&quot;&gt;<br />
/*&lt;![CDATA[*/<br />
MiniSite.Weather.print(&quot;Wealth&quot;);<br />
/*]]&gt;*/<br />
&lt;/script&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
</code></p>
<p>&nbsp;<a href="http://www.kinroc.com/blog/download.asp?id=6"><img alt="" border="0" style="margin: 0px 2px -4px 0px" src="http://www.kinroc.com/blog/images/download.gif" /><font face="Courier New">点击下载此文件</font></a></p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.kinroc.com/blog/article/development/109.htm" /> 
	  <id>http://www.kinroc.com/blog/default.asp?id=109</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Gmail 5大恼人之处]]></title>
	  <author>
		 <name>kinroc</name>
		 <uri>http://www.kinroc.com/blog/</uri>
		 <email>kinroc@kinroc.com</email>
	  </author>
	  <category term="" scheme="http://www.kinroc.com/blog/default.asp?cateID=5" label="Development" /> 
	  <updated>2008-12-24T23:12:23+08:00</updated>
	  <published>2008-12-24T23:12:23+08:00</published>
		  <summary type="html"><![CDATA[<p><span style="font-family: Arial">谷歌的Gmail可以说是目前最好的网络邮件服务之一，但其众多的功能并非完美无缺。 <br />
据国外媒体报道，作者列出了Gmail的5个让人烦恼的功能，它们分别为： <br />
<br />
<strong>邮件扫描</strong> <br />
<br />
出于投放相关广告的需要，谷歌Gmail邮件服务器要对所有的邮件内容进行扫描。笔者并不是一位激进的隐私保护倡导者，但对于谷歌的这种做法仍不敢苟同，当然谷歌能走到今天，能拥有今天这样在网络领域别人只能望其项背的地位，广告是最大的功臣。但一想到我的邮件内容已被一家上市公司出于盈利的需要而仔细的&ldquo;阅读&rdquo;了一遍，心里仍不是滋味。 <br />
<br />
当然我也知道，有些政府部门也有权查阅私人邮件，对此我也有些反感。对于谷歌，我的感情是复杂的，还是希望它能走得更远，至少我想谷歌公司并没有一位员工真正浏览了我的信件。 <br />
<br />
<strong>标签</strong> <br />
<br />
我感觉Gmail的标签基本没起什么作用，并且还很烦人，这么说或许有人会提反对意见。我习惯于将邮件根据内容分成几个文件夹，但不习惯Gmail每份邮件都要通过标签操作的烦人要求，这样太费事。 <br />
<br />
Gmail只是根据我提供的分类给每份邮件加了标签，但并没有放到不同的文件夹，标签其实也有助于我区分不同种类的邮件，但我感觉没有文件夹那样好用，如果这些标签功能再加上过滤功能就好了。 <br />
<br />
<strong>拖放功能在哪里</strong> <br />
<br />
Gmail不允许拖放邮件，这不能不说是一大遗憾，雅虎和AOL邮件服务都具备该功能。在Gmail中，只能点击邮件再选择阅读或放入垃圾箱，如果有拖放功能会更方便，因为有时为了节省时间，选定许多邮件直接扔进垃圾箱可能更方便。虽然不是什么大问题，但仍然相当烦人。 <br />
<br />
<strong>删除键不起作用</strong> <br />
<br />
Gmail邮件无法通过键盘上的&ldquo;删除&rdquo;键来删除，这也很让我纳闷。或许我属于老学院派的用户之一，总想着通过键盘来是实现所有的功能，的确，键盘上的删除键是我平时最常用的键之一，但在Gmail里就实现不了。 <br />
<br />
<strong>只有一个签名</strong> <br />
<br />
许多使用Gmail的用户通常都有多个邮件地址，但Gmail只允许一个签名地址，这显然是不够。笔者希望根据不同的邮件附上不同的签名地址，然而Gmail却无法实现这一点。所以，每次发新邮件时，笔者不得不将原有的签名地址删掉，再写上新签名地址。</span></p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.kinroc.com/blog/article/development/106.htm" /> 
	  <id>http://www.kinroc.com/blog/default.asp?id=106</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Javascript 是一个错误吗？]]></title>
	  <author>
		 <name>kinroc</name>
		 <uri>http://www.kinroc.com/blog/</uri>
		 <email>kinroc@kinroc.com</email>
	  </author>
	  <category term="" scheme="http://www.kinroc.com/blog/default.asp?cateID=5" label="Development" /> 
	  <updated>2008-08-26T18:03:03+08:00</updated>
	  <published>2008-08-26T18:03:03+08:00</published>
		  <summary type="html"><![CDATA[<p><span style="font-size: 12px"><span style=""><span style="font-family: Arial">对 Web 标准的修订做得越多，Web 开发的正确方向越值得怀疑。InfoWorld 的 Neil McAllister 对 Web 开发的现状与未来做了很好的思考。最近， ECMAScript 4 标准被弃用，统一为 ECMAScript3.1，如果任 ECMAScript 4 发展，Javascript 将带来巨大变化，Adobe 的 Ed Rowe 告诉作者，大部分人对 Javascript 一类语言存在障碍，这是为什么 Adobe 当初加入 ECMAScript 4 阵营的原因，Adobe 以及 ECMAScript 4 希望带来一些适于大规模程序的概念。 </span></span></span></p>
<p><span style="font-size: 12px"><span style="font-family: Arial">然而，尽管大规模程序的开发对 Adobe 可能是好的，可以肯定它未必对任何人都可行，传统程序语言就是一个例子。 </span></span></p>
<p><span style="font-size: 12px"><span style="font-family: Arial">对任何 Java 程序开发正规军来说，强类型，包装，以及命名空间尽管对维护大型程序来说可能很容易，但对 Web 程序员来说几乎没有什么用处，Web 程序员仅仅想通过编程对 UI 搞一点花样。 </span></span></p>
<p><span style="font-size: 12px"><span style="font-family: Arial">事实上，ECMAScript 委员会想创造一种万能编程语言的初衷非常值得置疑，曾经，有一群非常聪明的人联合起来，想写一个终极语言，这种语言非常安全，有活力，且非常标准化，几乎没有需要解释的地方，这就是 Ada，现在没有人还记得 Ada，因为这种语言非常严格，缺乏灵活，人们宁愿使用 C。 </span></span></p>
<p><span style="font-size: 12px"><span style="font-family: Arial">既然没有人能够创造一个终极的，完美的传统编程语言，又怎么能指望我们可以为 Web 创造一个这样的语言？我们越多讨论大规模 Web 程序，越应该知道，单一的编程语言将永远无法适合任何工作。 </span></span></p>
<p><span style="font-size: 12px"><span style="font-family: Arial">作者非常喜欢 Model-View-Controller 设计模式，然而这个模式并不适合于任何场合，不过这个模式可以为程序开发提供一套指南，总体上说，Model-View-Controller 的核心是从数据层，业务逻辑层，分离展示层。浏览器可以算作 View （展示层），我们不应强迫它同时成为业务逻辑层。 </span></span></p>
<p><span style="font-size: 12px"><span style="font-family: Arial">自从有了 Javascript，我们对它的指望越来越多，企图用它来创建整个程序，事实上，Javascript 不可能适合任何任务。我们不应该将越来越多的业务功能硬塞进浏览器，应该让浏览器专心作展示，而在其它地方展开业务逻辑。 </span></span></p>
<p><span style="font-size: 12px"><span style="font-family: Arial">比如，插件。当然，很多 Web 开发者会告诉你插件不是好东西，每次你强迫用户下载安装插件，都相当于在你的代码前面设置了障碍，事实是这样吗？ </span></span></p>
<p><span style="font-size: 12px"><span style="font-family: Arial">早期的插件绝大多数用来提供多媒体功能，很快就成为在线营销工具，那时，人们使用拨号上网，但很少有人怀疑人们对插件的耐心。 </span></span></p>
<p><span style="font-size: 12px"><span style="font-family: Arial">现在的例子是 Google Gears，一次性安装 Google Gears，任何基于 Google Gears 的程序都获得额外的功能。目前，基于 Google Gears 的站点不仅包含 Goolge Docs 与 Google Reader，也包含 MySpace, Picasa 甚至 Wordpress。 </span></span></p>
<p><span style="font-size: 12px"><span style="font-family: Arial">人们倾向于 Google Gears 的离线运行 Web 程序的能力，却忽视了 WorkerPool 模块，WorkerPool 允许 Javascript 在后台执行，独立于网页代码。WorkerPool 是独立的代码执行引擎，只不过刚好象普通浏览器那样运行相同的 Javascript 代码。 </span></span></p>
<p><span style="font-size: 12px"><span style="font-family: Arial">为什么要用 JavaScript，而不是 Python, Lisp 或其它。如果有一种应用有足够的说服力，就有足够的动力将它设计成插件，尤其是在现在的宽带世界。这样的例子已经存在，Adobe的 Flash 插件就可以执行 ECMAScript 4 标准的脚本，其它平台还包括 Curl 与 REBOL。 </span></span></p>
<p><span style="font-size: 12px"><span style="font-family: Arial">作为 Web 开发者，我们羞于选择其它道路，只是在无休止地对 JavaScript 进行改进和标准化。因为那是 Web 标准，我们告诉自己，JavaScript 是一个纯净的选项。 </span></span></p>
<p><span style="font-size: 12px"><span style="font-family: Arial">但如果只拘泥于单一的方式，我们为什么还要费这番力气？我们已经拥有一个功能齐备的客户端做任何事情，从数据库，到 e-mail，它已经安装到成千上万的企业，这就是 LotusNotes。 </span></span></p>
<p><span style="font-size: 12px"><span style="font-family: Arial">这就是我们前进的方向？这就是将来的浏览器模型？或者，对 Web 开发界来说，我们是否应该跳出这个圈子思考问题？ </span></span></p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.kinroc.com/blog/article/development/104.htm" /> 
	  <id>http://www.kinroc.com/blog/default.asp?id=104</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[js实现下拉菜单类(仍在完善中)]]></title>
	  <author>
		 <name>kinroc</name>
		 <uri>http://www.kinroc.com/blog/</uri>
		 <email>kinroc@kinroc.com</email>
	  </author>
	  <category term="" scheme="http://www.kinroc.com/blog/default.asp?cateID=5" label="Development" /> 
	  <updated>2008-04-29T14:42:12+08:00</updated>
	  <published>2008-04-29T14:42:12+08:00</published>
		  <summary type="html"><![CDATA[<strong><div align="center">Dro&#112;Menu.js(下拉菜单类)说明文档(By Kinroc)</div></strong><br/><strong>1.创建对象</strong><br/>var menu = new Dro&#112;Menu(&#34;menu&#34;,&#34;dro&#112;ID&#34;,&#34;dro&#112;_menu&#34;,&#34;&#34;,&#34;now&#34;,false);&#160;&#160;&#160;&#160;<br/>obj&nbsp;&nbsp;//对象名<br/>dro&#112;ID&nbsp;&nbsp;//下拉菜单<br/>menuID&nbsp;&nbsp;//菜单ID<br/>highlightDefaultCss&nbsp;&nbsp;//菜单默认css样式<br/>highlightCss&nbsp;&nbsp;//选中的css样式<br/>isFade&nbsp;&nbsp;//是否淡入淡出<br/><strong>2.对象方法</strong><br/>//设置对象名<br/>menu.SetObj(“menu”);<br/>&#160;&#160;&#160;&#160;<br/>//设置下拉菜单ID<br/>menu.SetDro&#112;ID(“Id”);<br/>&#160;&#160;&#160;&#160;<br/>//设置菜单<br/>menu.SetMenuID(“Id”);<br/>&#160;&#160;&#160;&#160;<br/>//设置下拉菜单整体css样式<br/>menu.SetDro&#112;Css(“css”);<br/>&#160;&#160;&#160;&#160;<br/>//设置菜单默认css样式<br/>menu.SetHighlightDefaultCss(“css”);<br/>&#160;&#160;&#160;&#160;<br/>//设置选中的css样式<br/>menu.SetHighlightCss(“css”);<br/>&#160;&#160;&#160;&#160;<br/>//设置是否淡入淡出(true/false)<br/>menu.SetIsFade(false);<br/>&#160;&#160;&#160;&#160;<br/>//设置淡入淡出程度(1-100,默认为20)<br/>menu.SetFadeAlpha(“20”);<br/>&#160;&#160;&#160;&#160;<br/>//设置onchange事件<br/>menu.SetChangeEvent(“e”);<br/>&#160;&#160;&#160;&#160;<br/>//设置显示下拉菜单事件<br/>menu.SetShowDro&#112;ID(“Id”);<br/>&#160;&#160;&#160;&#160;<br/>//动态添加菜单(参数为数组)<br/>var arr = [{text:’测试1’,value:’ 测试1’},{ text:’测试2’,value:’ 测试2’}]<br/>menu.AddOption(arr);<br/>&#160;&#160;&#160;&#160;<br/>//取得菜单数组<br/>menu.GetOptions();<br/>&#160;&#160;&#160;&#160;<br/>//生成下拉菜单<br/>menu.ShowDro&#112;();<br/><br/><strong>注:程序有很多不足之处,以后会慢慢解决,也欢迎大家提出建议!</strong><br/><br/><span id="mdown_hgipsiiibf"></span><script language="javascript" type="text/javascript">check('Action.asp?action=Antimdown&id=4&downurl=download%2Easp%3Fid%3D4&main=%E7%82%B9%E5%87%BB%E4%B8%8B%E8%BD%BD%E6%AD%A4%E6%96%87%E4%BB%B6','mdown_hgipsiiibf','mdown_hgipsiiibf');</script><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.kinroc.com/blog/article/development/88.htm" /> 
	  <id>http://www.kinroc.com/blog/default.asp?id=88</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[js实现遮罩并弹出对话框类(仍在完善中)]]></title>
	  <author>
		 <name>kinroc</name>
		 <uri>http://www.kinroc.com/blog/</uri>
		 <email>kinroc@kinroc.com</email>
	  </author>
	  <category term="" scheme="http://www.kinroc.com/blog/default.asp?cateID=5" label="Development" /> 
	  <updated>2008-04-29T14:36:47+08:00</updated>
	  <published>2008-04-29T14:36:47+08:00</published>
		  <summary type="html"><![CDATA[<div align="center"><strong>Dialog.js(对话框类)说明文档(By Kinroc)</strong></div><br/><strong>1.创建对象</strong><br/>Var dia = new Dialog(obj,maskID,opacity,titleID,dialogID,cssName,width,height,isMove,isSize,ContentID);<br/>obj&nbsp;&nbsp;//对象名<br/>maskID&nbsp;&nbsp;//遮罩ID<br/>opacity&nbsp;&nbsp;//遮罩层透明度(默认为50,火狐下为该值除以100,即0.5)<br/>titleID&nbsp;&nbsp;//窗口标题ID<br/>dialogID&nbsp;&nbsp;//对话框ID<br/>cssName&nbsp;&nbsp;//css类名<br/>width&nbsp;&nbsp;//窗口宽度<br/>height&nbsp;&nbsp;//窗口高度<br/>isMove&nbsp;&nbsp;//是否移动(true/false)<br/>isSize&nbsp;&nbsp;//是否可以调整大小(0代表不可以调整,1代表可以调整,初始值为0)<br/>ContentID&nbsp;&nbsp;//内容ID<br/><br/><strong>2.对象方法</strong><br/>//设置对象名<br/>dia.SetObj(“dia”);<br/>&#160;&#160;&#160;&#160;<br/>//设置遮罩层透明度(默认为50,火狐下为该值除以100,即0.5)<br/>dia.SetOpacity(“50”);<br/>&#160;&#160;&#160;&#160;<br/>//设置窗口标题ID<br/>dia.SetTitleID(“Id”);<br/>&#160;&#160;&#160;&#160;<br/>//设置遮罩ID<br/>dia.SetMaskID(“Id”);<br/>&#160;&#160;&#160;&#160;<br/>//设置对话框ID<br/>dia.SetDialogID(Id);<br/>&#160;&#160;&#160;&#160;<br/>//设置对话框css类名<br/>dia.SetCssName(“css”);<br/>&#160;&#160;&#160;&#160;<br/>//设置窗口宽度<br/>dia.SetWidth(“300”);<br/>&#160;&#160;&#160;&#160;<br/>//设置窗口高度<br/>dia.SetHeight(“300”);<br/>&#160;&#160;&#160;&#160;<br/>//设置移动区域ID(空则代表不能移动)<br/>dia.SetMoveID(“Id”);<br/>&#160;&#160;&#160;&#160;<br/>//设置是否可以移动(true/false)<br/>dia.SetIsMove(true);<br/>&#160;&#160;&#160;&#160;<br/>//设置是否可以调整大小(true/false)<br/>dia.SetIsSize(true);<br/>&#160;&#160;&#160;&#160;<br/>//设置内容ID<br/>dia.SetContentID(“Id”);<br/>&#160;&#160;&#160;&#160;<br/>//设置遮罩层颜色(默认为#f0f0f0)<br/>dia.SetMaskColor(“#f0f0f0”);<br/>&#160;&#160;&#160;&#160;<br/>//设置对话框里的内容(可以使文本也可以是对象)<br/>dia.SetContent(“content”);<br/>&#160;&#160;&#160;&#160;<br/>//设置对话框里的标题<br/>dia.SetTitle(“title”);<br/>&#160;&#160;&#160;&#160;<br/>//设置关闭按钮ID<br/>dia.SetCloseID(“Id”);<br/>&#160;&#160;&#160;&#160;<br/>//设置关闭后调用的函数<br/>dia. SetCloseFunction (“test();”);<br/>&#160;&#160;&#160;&#160;<br/>//设置某个ID的事件<br/>dia. SetEventByID (“id”,”onclick”,”test();”);<br/>&#160;&#160;&#160;&#160;<br/>//生成遮罩层+对话框<br/>dia.Cr&#101;ateDialogDiv();<br/>&#160;&#160;&#160;&#160;<br/>//关闭对话框<br/>Dia. CloseMask();<br/><br/><strong>注:程序有很多不足之处,以后会慢慢解决,也欢迎大家提出建议!</strong><br/><br/><br/><span id="mdown_gu48lmkjd5"></span><script language="javascript" type="text/javascript">check('Action.asp?action=Antimdown&id=5&downurl=download%2Easp%3Fid%3D5&main=%E7%82%B9%E5%87%BB%E4%B8%8B%E8%BD%BD%E6%AD%A4%E6%96%87%E4%BB%B6','mdown_gu48lmkjd5','mdown_gu48lmkjd5');</script><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.kinroc.com/blog/article/development/87.htm" /> 
	  <id>http://www.kinroc.com/blog/default.asp?id=87</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[lucene2.3.1]]></title>
	  <author>
		 <name>kinroc</name>
		 <uri>http://www.kinroc.com/blog/</uri>
		 <email>kinroc@kinroc.com</email>
	  </author>
	  <category term="" scheme="http://www.kinroc.com/blog/default.asp?cateID=5" label="Development" /> 
	  <updated>2008-03-26T08:59:53+08:00</updated>
	  <published>2008-03-26T08:59:53+08:00</published>
		  <summary type="html"><![CDATA[<span style="font-size:10pt;line-height:100%;"><span style="font-family:Arial">======================= Release 2.3.1 2008-02-22 =======================<br/><br/>Bug fixes<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/> 1. LUCENE-1168: Fixed corruption cases when autoCommit=false and<br/>&nbsp;&nbsp;&nbsp;&nbsp;documents have mixed term vectors (Suresh Guvvala via Mike<br/>&nbsp;&nbsp;&nbsp;&nbsp;McCandless).<br/><br/> 2. LUCENE-1171: Fixed some cases wh&#101;re OOM errors could cause<br/>&nbsp;&nbsp;&nbsp;&nbsp;deadlock in IndexWriter (Mike McCandless).<br/><br/> 3. LUCENE-1173: Fixed corruption case when autoCommit=false and bulk<br/>&nbsp;&nbsp;&nbsp;&nbsp;merging of stored fields is used (Yonik via Mike McCandless).<br/><br/> 4. LUCENE-1163: Fixed bug in CharArraySet.contains(char[] buffer, int<br/>&nbsp;&nbsp;&nbsp;&nbsp;offset, int len) that was ignoring offset and thus giving the<br/>&nbsp;&nbsp;&nbsp;&nbsp;wrong answer.&nbsp;&nbsp;(Thomas Peuss via Mike McCandless)<br/>&#160;&#160;&#160;&#160;<br/> 5. LUCENE-1177: Fix rare case wh&#101;re IndexWriter.optimize might do too<br/>&nbsp;&nbsp;&nbsp;&nbsp;many merges at the end.&nbsp;&nbsp;(Mike McCandless)<br/>&#160;&#160;&#160;&#160;<br/> 6. LUCENE-1176: Fix corruption case when documents with no term<br/>&nbsp;&nbsp;&nbsp;&nbsp;vector fields are added before documents with term vector fields.<br/>&nbsp;&nbsp;&nbsp;&nbsp;(Mike McCandless)<br/>&#160;&#160;&#160;&#160;<br/> 7. LUCENE-1179: Fixed assert statement that was incorrectly<br/>&nbsp;&nbsp;&nbsp;&nbsp;preventing Fields with empty-string field name from working.<br/>&nbsp;&nbsp;&nbsp;&nbsp;(Sergey Kabashnyuk via Mike McCandless)<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://apache.mirror.phpchina.com/lucene/java/" target="_blank" rel="external">http://apache.mirror.phpchina.com/lucene/java/</a><br/></span></span>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.kinroc.com/blog/article/development/85.htm" /> 
	  <id>http://www.kinroc.com/blog/default.asp?id=85</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[lucene2.3发布了]]></title>
	  <author>
		 <name>kinroc</name>
		 <uri>http://www.kinroc.com/blog/</uri>
		 <email>kinroc@kinroc.com</email>
	  </author>
	  <category term="" scheme="http://www.kinroc.com/blog/default.asp?cateID=5" label="Development" /> 
	  <updated>2008-02-19T11:26:16+08:00</updated>
	  <published>2008-02-19T11:26:16+08:00</published>
		  <summary type="html"><![CDATA[<p><font size="2">据说速度比2.2提高了500%，呵呵，不知道真的假的！不过还是感觉好多地方比2.2版本优化了，呵呵！</font></p>
<p><font size="2">以下是修改日志:<br />======================= Release 2.3.0 2008-01-23 =======================</font></p>
<p><font size="2">Changes in runtime behavior</font></p>
<p><font size="2">&nbsp;1. LUCENE-994: Defaults for IndexWriter have been changed to maximize<br />&nbsp;&nbsp;&nbsp; out-of-the-box indexing speed.&nbsp; First, IndexWriter now flushes by<br />&nbsp;&nbsp;&nbsp; RAM usage (16 MB by default) instead of a fixed doc count (call<br />&nbsp;&nbsp;&nbsp; IndexWriter.setMaxBufferedDocs to get backwards compatible<br />&nbsp;&nbsp;&nbsp; behavior).&nbsp; Second, ConcurrentMergeScheduler is used to run merges<br />&nbsp;&nbsp;&nbsp; using background threads (call IndexWriter.setMergeScheduler(new<br />&nbsp;&nbsp;&nbsp; SerialMergeScheduler()) to get backwards compatible behavior).<br />&nbsp;&nbsp;&nbsp; Third, merges are chosen based on size in bytes of each segment<br />&nbsp;&nbsp;&nbsp; rather than document count of each segment (call<br />&nbsp;&nbsp;&nbsp; IndexWriter.setMergePolicy(new LogDocMergePolicy()) to get<br />&nbsp;&nbsp;&nbsp; backwards compatible behavior).</font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp; NOTE: users of ParallelReader must change back all of these<br />&nbsp;&nbsp;&nbsp; defaults in order to ensure the docIDs &quot;align&quot; across all parallel<br />&nbsp;&nbsp;&nbsp; indices.</font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp; (Mike McCandless)</font></p>
<p><font size="2">&nbsp;2. LUCENE-1045: SortField.AUTO didn't work with long. When detecting<br />&nbsp;&nbsp;&nbsp; the field type for sorting automatically, numbers used to be<br />&nbsp;&nbsp;&nbsp; interpreted as int, then as float, if parsing the number as an int<br />&nbsp;&nbsp;&nbsp; failed. Now the detection checks for int, then for long,<br />&nbsp;&nbsp;&nbsp; then for float. (Daniel Naber)</font></p>
<p><font size="2">API Changes</font></p>
<p><font size="2">&nbsp;1. LUCENE-843: Added IndexWriter.setRAMBufferSizeMB(...) to have<br />&nbsp;&nbsp;&nbsp; IndexWriter flush whenever the buffered documents are using more<br />&nbsp;&nbsp;&nbsp; than the specified amount of RAM.&nbsp; Also added new APIs to Token<br />&nbsp;&nbsp;&nbsp; that allow one to set a char[] plus offset and length to specify a<br />&nbsp;&nbsp;&nbsp; token (to avoid creating a new String() for each Token).&nbsp; (Mike<br />&nbsp;&nbsp;&nbsp; McCandless)</font></p>
<p><font size="2">&nbsp;2. LUCENE-963: Add setters to Field to allow for re-using a single<br />&nbsp;&nbsp;&nbsp; Field instance during indexing.&nbsp; This is a sizable performance<br />&nbsp;&nbsp;&nbsp; gain, especially for small documents.&nbsp; (Mike McCandless)</font></p>
<p><font size="2">&nbsp;3. LUCENE-969: Add new APIs to Token, TokenStream and Analyzer to<br />&nbsp;&nbsp;&nbsp; permit re-using of Token and TokenStream instances during<br />&nbsp;&nbsp;&nbsp; indexing.&nbsp; Changed Token to use a char[] as the store for the<br />&nbsp;&nbsp;&nbsp; termText instead of String.&nbsp; This gives faster tokenization<br />&nbsp;&nbsp;&nbsp; performance (~10-15%).&nbsp; (Mike McCandless)</font></p>
<p><font size="2">&nbsp;4. LUCENE-847: Factored MergePolicy, which determines which merges<br />&nbsp;&nbsp;&nbsp; should take place and when, as well as MergeScheduler, which<br />&nbsp;&nbsp;&nbsp; determines when the selected merges should actually run, out of<br />&nbsp;&nbsp;&nbsp; IndexWriter.&nbsp; The default merge policy is now<br />&nbsp;&nbsp;&nbsp; LogByteSizeMergePolicy (see LUCENE-845) and the default merge<br />&nbsp;&nbsp;&nbsp; scheduler is now ConcurrentMergeScheduler (see<br />&nbsp;&nbsp;&nbsp; LUCENE-870). (Steven Parkes via Mike McCandless)</font></p>
<p><font size="2">&nbsp;5. LUCENE-1052: Add IndexReader.setTermInfosIndexDivisor(int) method<br />&nbsp;&nbsp;&nbsp; that allows you to reduce memory usage of the termInfos by further<br />&nbsp;&nbsp;&nbsp; sub-sampling (over the termIndexInterval that was used during<br />&nbsp;&nbsp;&nbsp; indexing) which terms are loaded into memory.&nbsp; (Chuck Williams,<br />&nbsp;&nbsp;&nbsp; Doug Cutting via Mike McCandless)<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;6. LUCENE-743: Add IndexReader.reopen() method that re-opens an<br />&nbsp;&nbsp;&nbsp; existing IndexReader (see New features -&gt; 8.) (Michael Busch)</font></p>
<p><font size="2">&nbsp;7. LUCENE-1062: Add setData(byte[] data), <br />&nbsp;&nbsp;&nbsp; setData(byte[] data, int offset, int length), getData(), getOffset()<br />&nbsp;&nbsp;&nbsp; and clone() methods to o.a.l.index.Payload. Also add the field name <br />&nbsp;&nbsp;&nbsp; as arg to Similarity.scorePayload(). (Michael Busch)</font></p>
<p><font size="2">&nbsp;8. LUCENE-982: Add IndexWriter.optimize(int maxNumSegments) method to<br />&nbsp;&nbsp;&nbsp; &quot;partially optimize&quot; an index down to maxNumSegments segments.<br />&nbsp;&nbsp;&nbsp; (Mike McCandless)</font></p>
<p><font size="2">&nbsp;9. LUCENE-1080: Changed Token.DEFAULT_TYPE to be public.</font></p>
<p><font size="2">10. LUCENE-1064: Changed TopDocs constructor to be public. <br />&nbsp;&nbsp;&nbsp;&nbsp; (Shai Erera via Michael Busch)</font></p>
<p><font size="2">11. LUCENE-1079: DocValues cleanup: constructor now has no params,<br />&nbsp;&nbsp;&nbsp; and getInnerArray() now throws UnsupportedOperationException (Doron Cohen)</font></p>
<p><font size="2">12. LUCENE-1089: Added PriorityQueue.insertWithOverflow, which returns<br />&nbsp;&nbsp;&nbsp; the Object (if any) that was bumped from the queue to allow<br />&nbsp;&nbsp;&nbsp; re-use.&nbsp; (Shai Erera via Mike McCandless)<br />&nbsp;&nbsp;&nbsp; <br />13. LUCENE-1101: Token reuse 'contract' (defined LUCENE-969)<br />&nbsp;&nbsp;&nbsp; modified so it is token producer's responsibility<br />&nbsp;&nbsp;&nbsp; to call Token.clear(). (Doron Cohen)&nbsp;&nbsp; </font></p>
<p><font size="2">14. LUCENE-1118: Changed StandardAnalyzer to skip too-long (default &gt;<br />&nbsp;&nbsp;&nbsp; 255 characters) tokens.&nbsp; You can increase this limit by calling<br />&nbsp;&nbsp;&nbsp; StandardAnalyzer.setMaxTokenLength(...).&nbsp; (Michael McCandless)</font></p>
<p><br /><font size="2">Bug fixes</font></p>
<p><font size="2">&nbsp;1. LUCENE-933: QueryParser fixed to not produce empty sub <br />&nbsp;&nbsp;&nbsp; BooleanQueries &quot;()&quot; even if the Analyzer produced no <br />&nbsp;&nbsp;&nbsp; tokens for input. (Doron Cohen)</font></p>
<p><font size="2">&nbsp;2. LUCENE-955: Fixed SegmentTermPositions to work correctly with the<br />&nbsp;&nbsp;&nbsp; first term in the dictionary. (Michael Busch)</font></p>
<p><font size="2">&nbsp;3. LUCENE-951: Fixed NullPointerException in MultiLevelSkipListReader<br />&nbsp;&nbsp;&nbsp; that was thrown after a call of TermPositions.seek(). <br />&nbsp;&nbsp;&nbsp; (Rich Johnson via Michael Busch)<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;4. LUCENE-938: Fixed cases where an unhandled exception in<br />&nbsp;&nbsp;&nbsp; IndexWriter's methods could cause deletes to be lost.<br />&nbsp;&nbsp;&nbsp; (Steven Parkes via Mike McCandless)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;5. LUCENE-962: Fixed case where an unhandled exception in<br />&nbsp;&nbsp;&nbsp; IndexWriter.addDocument or IndexWriter.updateDocument could cause<br />&nbsp;&nbsp;&nbsp; unreferenced files in the index to not be deleted<br />&nbsp;&nbsp;&nbsp; (Steven Parkes via Mike McCandless)<br />&nbsp; <br />&nbsp;6. LUCENE-957: RAMDirectory fixed to properly handle directories<br />&nbsp;&nbsp;&nbsp; larger than Integer.MAX_VALUE. (Doron Cohen)</font></p>
<p><font size="2">&nbsp;7. LUCENE-781: MultiReader fixed to not throw NPE if isCurrent(),<br />&nbsp;&nbsp;&nbsp; isOptimized() or getVersion() is called. Separated MultiReader<br />&nbsp;&nbsp;&nbsp; into two classes: MultiSegmentReader extends IndexReader, is<br />&nbsp;&nbsp;&nbsp; package-protected and is created automatically by IndexReader.open()<br />&nbsp;&nbsp;&nbsp; in case the index has multiple segments. The public MultiReader <br />&nbsp;&nbsp;&nbsp; now extends MultiSegmentReader and is intended to be used by users<br />&nbsp;&nbsp;&nbsp; who want to add their own subreaders. (Daniel Naber, Michael Busch)</font></p>
<p><font size="2">&nbsp;8. LUCENE-970: FilterIndexReader now implements isOptimized(). Before<br />&nbsp;&nbsp;&nbsp; a call of isOptimized() would throw a NPE. (Michael Busch)</font></p>
<p><font size="2">&nbsp;9. LUCENE-832: ParallelReader fixed to not throw NPE if isCurrent(),<br />&nbsp;&nbsp;&nbsp; isOptimized() or getVersion() is called. (Michael Busch)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />10. LUCENE-948: Fix FNFE exception caused by stale NFS client<br />&nbsp;&nbsp;&nbsp; directory listing caches when writers on different machines are<br />&nbsp;&nbsp;&nbsp; sharing an index over NFS and using a custom deletion policy (Mike<br />&nbsp;&nbsp;&nbsp; McCandless)</font></p>
<p><font size="2">11. LUCENE-978: Ensure TermInfosReader, FieldsReader, and FieldsReader<br />&nbsp;&nbsp;&nbsp; close any streams they had opened if an exception is hit in the<br />&nbsp;&nbsp;&nbsp; constructor.&nbsp; (Ning Li via Mike McCandless)</font></p>
<p><font size="2">12. LUCENE-985: If an extremely long term is in a doc (&gt; 16383 chars),<br />&nbsp;&nbsp;&nbsp; we now throw an IllegalArgumentException saying the term is too<br />&nbsp;&nbsp;&nbsp; long, instead of cryptic ArrayIndexOutOfBoundsException.&nbsp; (Karl<br />&nbsp;&nbsp;&nbsp; Wettin via Mike McCandless)</font></p>
<p><font size="2">13. LUCENE-991: The explain() method of BoostingTermQuery had errors<br />&nbsp;&nbsp;&nbsp; when no payloads were present on a document.&nbsp; (Peter Keegan via<br />&nbsp;&nbsp;&nbsp; Grant Ingersoll)</font></p>
<p><font size="2">14. LUCENE-992: Fixed IndexWriter.updateDocument to be atomic again<br />&nbsp;&nbsp;&nbsp; (this was broken by LUCENE-843).&nbsp; (Ning Li via Mike McCandless)</font></p>
<p><font size="2">15. LUCENE-1008: Fixed corruption case when document with no term<br />&nbsp;&nbsp;&nbsp; vector fields is added after documents with term vector fields.<br />&nbsp;&nbsp;&nbsp; This bug was introduced with LUCENE-843.&nbsp; (Grant Ingersoll via<br />&nbsp;&nbsp;&nbsp; Mike McCandless)</font></p>
<p><font size="2">16. LUCENE-1006: Fixed QueryParser to accept a &quot;&quot; field value (zero<br />&nbsp;&nbsp;&nbsp; length quoted string.)&nbsp; (yonik)</font></p>
<p><font size="2">17. LUCENE-1010: Fixed corruption case when document with no term<br />&nbsp;&nbsp;&nbsp; vector fields is added after documents with term vector fields.<br />&nbsp;&nbsp;&nbsp; This case is hit during merge and would cause an EOFException.<br />&nbsp;&nbsp;&nbsp; This bug was introduced with LUCENE-984.&nbsp; (Andi Vajda via Mike<br />&nbsp;&nbsp;&nbsp; McCandless)</font></p>
<p><font size="2">19. LUCENE-1009: Fix merge slowdown with LogByteSizeMergePolicy when<br />&nbsp;&nbsp;&nbsp; autoCommit=false and documents are using stored fields and/or term<br />&nbsp;&nbsp;&nbsp; vectors.&nbsp; (Mark Miller via Mike McCandless)</font></p>
<p><font size="2">20. LUCENE-1011: Fixed corruption case when two or more machines,<br />&nbsp;&nbsp;&nbsp; sharing an index over NFS, can be writers in quick succession.<br />&nbsp;&nbsp;&nbsp; (Patrick Kimber via Mike McCandless)</font></p>
<p><font size="2">21. LUCENE-1028: Fixed Weight serialization for few queries:<br />&nbsp;&nbsp;&nbsp; DisjunctionMaxQuery, ValueSourceQuery, CustomScoreQuery.<br />&nbsp;&nbsp;&nbsp; Serialization check added for all queries.<br />&nbsp;&nbsp;&nbsp; (Kyle Maxwell via Doron Cohen)</font></p>
<p><font size="2">22. LUCENE-1048: Fixed incorrect behavior in Lock.obtain(...) when the<br />&nbsp;&nbsp;&nbsp; timeout argument is very large (eg Long.MAX_VALUE).&nbsp; Also added<br />&nbsp;&nbsp;&nbsp; Lock.LOCK_OBTAIN_WAIT_FOREVER constant to never timeout.&nbsp; (Nikolay<br />&nbsp;&nbsp;&nbsp; Diakov via Mike McCandless)</font></p>
<p><font size="2">23. LUCENE-1050: Throw LockReleaseFailedException in<br />&nbsp;&nbsp;&nbsp; Simple/NativeFSLockFactory if we fail to delete the lock file when<br />&nbsp;&nbsp;&nbsp; releasing the lock.&nbsp; (Nikolay Diakov via Mike McCandless)</font></p>
<p><font size="2">24. LUCENE-1071: Fixed SegmentMerger to correctly set payload bit in <br />&nbsp;&nbsp;&nbsp; the merged segment. (Michael Busch)</font></p>
<p><font size="2">25. LUCENE-1042: Remove throwing of IOException in getTermFreqVector(int, String, TermVectorMapper) to be consistent<br />&nbsp;&nbsp;&nbsp; with other getTermFreqVector calls.&nbsp; Also removed the throwing of the other IOException in that method to be consistent.&nbsp; (Karl Wettin via Grant Ingersoll)<br />&nbsp;&nbsp;&nbsp; <br />26. LUCENE-1096: Fixed Hits behavior when hits' docs are deleted <br />&nbsp;&nbsp;&nbsp; along with iterating the hits. Deleting docs already retrieved <br />&nbsp;&nbsp;&nbsp; now works seamlessly. If docs not yet retrieved are deleted <br />&nbsp;&nbsp;&nbsp; (e.g. from another thread), and then, relying on the initial <br />&nbsp;&nbsp;&nbsp; Hits.length(), an application attempts to retrieve more hits <br />&nbsp;&nbsp;&nbsp; than actually exist , a ConcurrentMidificationException <br />&nbsp;&nbsp;&nbsp; is thrown.&nbsp; (Doron Cohen)</font></p>
<p><font size="2">27. LUCENE-1068: Changed StandardTokenizer to fix an issue with it marking<br />&nbsp; the type of some tokens incorrectly.&nbsp; This is done by adding a new flag named<br />&nbsp; replaceInvalidAcronym which defaults to false, the current, incorrect behavior.&nbsp; Setting<br />&nbsp; this flag to true fixes the problem.&nbsp; This flag is a temporary fix and is already<br />&nbsp; marked as being deprecated.&nbsp; 3.x will implement the correct approach.&nbsp; (Shai Erera via Grant Ingersoll)<br />&nbsp; LUCENE-1140: Fixed NPE caused by 1068 (Alexei Dets via Grant Ingersoll)<br />&nbsp;&nbsp;&nbsp; <br />28. LUCENE-749: ChainedFilter behavior fixed when logic of <br />&nbsp;&nbsp;&nbsp; first filter is ANDNOT.&nbsp; (Antonio Bruno via Doron Cohen)</font></p>
<p><font size="2">29. LUCENE-508: Make sure SegmentTermEnum.prev() is accurate (= last<br />&nbsp;&nbsp;&nbsp; term) after next() returns false.&nbsp; (Steven Tamm via Mike<br />&nbsp;&nbsp;&nbsp; McCandless)</font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp; <br />New features</font></p>
<p><font size="2">&nbsp;1. LUCENE-906: Elision filter for French.<br />&nbsp;&nbsp;&nbsp; (Mathieu Lecarme via Otis Gospodnetic)</font></p>
<p><font size="2">&nbsp;2. LUCENE-960: Added a SpanQueryFilter and related classes to allow for<br />&nbsp;&nbsp;&nbsp; not only filtering, but knowing where in a Document a Filter matches<br />&nbsp;&nbsp;&nbsp; (Grant Ingersoll)</font></p>
<p><font size="2">&nbsp;3. LUCENE-868: Added new Term Vector access features.&nbsp; New callback<br />&nbsp;&nbsp;&nbsp; mechanism allows application to define how and where to read Term<br />&nbsp;&nbsp;&nbsp; Vectors from disk. This implementation contains several extensions<br />&nbsp;&nbsp;&nbsp; of the new abstract TermVectorMapper class.&nbsp; The new API should be<br />&nbsp;&nbsp;&nbsp; back-compatible.&nbsp; No changes in the actual storage of Term Vectors<br />&nbsp;&nbsp;&nbsp; has taken place.<br />&nbsp;3.1 LUCENE-1038: Added setDocumentNumber() method to TermVectorMapper<br />&nbsp;&nbsp;&nbsp;&nbsp; to provide information about what document is being accessed.<br />&nbsp;&nbsp;&nbsp;&nbsp; (Karl Wettin via Grant Ingersoll)</font></p>
<p><font size="2">&nbsp;4. LUCENE-975: Added PositionBasedTermVectorMapper that allows for<br />&nbsp;&nbsp;&nbsp; position based lookup of term vector information.<br />&nbsp;&nbsp;&nbsp; See item #3 above (LUCENE-868).</font></p>
<p><font size="2">&nbsp;5. LUCENE-1011: Added simple tools (all in org.apache.lucene.store)<br />&nbsp;&nbsp;&nbsp; to verify that locking is working properly.&nbsp; LockVerifyServer runs<br />&nbsp;&nbsp;&nbsp; a separate server to verify locks.&nbsp; LockStressTest runs a simple<br />&nbsp;&nbsp;&nbsp; tool that rapidly obtains and releases locks.<br />&nbsp;&nbsp;&nbsp; VerifyingLockFactory is a LockFactory that wraps any other<br />&nbsp;&nbsp;&nbsp; LockFactory and consults the LockVerifyServer whenever a lock is<br />&nbsp;&nbsp;&nbsp; obtained or released, throwing an exception if an illegal lock<br />&nbsp;&nbsp;&nbsp; obtain occurred.&nbsp; (Patrick Kimber via Mike McCandless)</font></p>
<p><font size="2">&nbsp;6. LUCENE-1015: Added FieldCache extension (ExtendedFieldCache) to<br />&nbsp;&nbsp;&nbsp; support doubles and longs.&nbsp; Added support into SortField for sorting<br />&nbsp;&nbsp;&nbsp; on doubles and longs as well.&nbsp; (Grant Ingersoll)</font></p>
<p><font size="2">&nbsp;7. LUCENE-1020: Created basic index checking &amp; repair tool<br />&nbsp;&nbsp;&nbsp; (o.a.l.index.CheckIndex).&nbsp; When run without -fix it does a<br />&nbsp;&nbsp;&nbsp; detailed test of all segments in the index and reports summary<br />&nbsp;&nbsp;&nbsp; information and any errors it hit.&nbsp; With -fix it will remove<br />&nbsp;&nbsp;&nbsp; segments that had errors.&nbsp; (Mike McCandless)</font></p>
<p><font size="2">&nbsp;8. LUCENE-743: Add IndexReader.reopen() method that re-opens an<br />&nbsp;&nbsp;&nbsp; existing IndexReader by only loading those portions of an index<br />&nbsp;&nbsp;&nbsp; that have changed since the reader was (re)opened. reopen() can<br />&nbsp;&nbsp;&nbsp; be significantly faster than open(), depending on the amount of<br />&nbsp;&nbsp;&nbsp; index changes. SegmentReader, MultiSegmentReader, MultiReader,<br />&nbsp;&nbsp;&nbsp; and ParallelReader implement reopen(). (Michael Busch) </font></p>
<p><font size="2">&nbsp;9. LUCENE-1040: CharArraySet useful for efficiently checking<br />&nbsp;&nbsp;&nbsp; set membership of text specified by char[]. (yonik)</font></p>
<p><font size="2">10. LUCENE-1073: Created SnapshotDeletionPolicy to facilitate taking a<br />&nbsp;&nbsp;&nbsp; live backup of an index without pausing indexing.&nbsp; (Mike<br />&nbsp;&nbsp;&nbsp; McCandless)<br />&nbsp;&nbsp;&nbsp; <br />11. LUCENE-1019: CustomScoreQuery enhanced to support multiple <br />&nbsp;&nbsp;&nbsp; ValueSource queries. (Kyle Maxwell via Doron Cohen)<br />&nbsp;&nbsp;&nbsp; <br />12. LUCENE-1095: Added an option to StopFilter to increase <br />&nbsp;&nbsp;&nbsp; positionIncrement of the token succeeding a stopped token.<br />&nbsp;&nbsp;&nbsp; Disabled by default. Similar option added to QueryParser <br />&nbsp;&nbsp;&nbsp; to consider token positions when creating PhraseQuery <br />&nbsp;&nbsp;&nbsp; and MultiPhraseQuery. Disabled by default (so by default<br />&nbsp;&nbsp;&nbsp; the query parser ignores position increments).<br />&nbsp;&nbsp;&nbsp; (Doron Cohen)&nbsp; <br />&nbsp;</font></p>
<p><font size="2">Optimizations</font></p>
<p><font size="2">&nbsp;1. LUCENE-937: CachingTokenFilter now uses an iterator to access the <br />&nbsp;&nbsp;&nbsp; Tokens that are cached in the LinkedList. This increases performance <br />&nbsp;&nbsp;&nbsp; significantly, especially when the number of Tokens is large. <br />&nbsp;&nbsp;&nbsp; (Mark Miller via Michael Busch)</font></p>
<p><font size="2">&nbsp;2. LUCENE-843: Substantial optimizations to improve how IndexWriter<br />&nbsp;&nbsp;&nbsp; uses RAM for buffering documents and to speed up indexing (2X-8X<br />&nbsp;&nbsp;&nbsp; faster).&nbsp; A single shared hash table now records the in-memory<br />&nbsp;&nbsp;&nbsp; postings per unique term and is directly flushed into a single<br />&nbsp;&nbsp;&nbsp; segment.&nbsp; (Mike McCandless)<br />&nbsp;<br />&nbsp;3. LUCENE-892: Fixed extra &quot;buffer to buffer copy&quot; that sometimes<br />&nbsp;&nbsp;&nbsp; takes place when using compound files.&nbsp; (Mike McCandless)</font></p>
<p><font size="2">&nbsp;4. LUCENE-959: Remove synchronization in Document (yonik)</font></p>
<p><font size="2">&nbsp;5. LUCENE-963: Add setters to Field to allow for re-using a single<br />&nbsp;&nbsp;&nbsp; Field instance during indexing.&nbsp; This is a sizable performance<br />&nbsp;&nbsp;&nbsp; gain, especially for small documents.&nbsp; (Mike McCandless)</font></p>
<p><font size="2">&nbsp;6. LUCENE-939: Check explicitly for boundary conditions in FieldInfos<br />&nbsp;&nbsp;&nbsp; and don't rely on exceptions. (Michael Busch)</font></p>
<p><font size="2">&nbsp;7. LUCENE-966: Very substantial speedups (~6X faster) for<br />&nbsp;&nbsp;&nbsp; StandardTokenizer (StandardAnalyzer) by using JFlex instead of<br />&nbsp;&nbsp;&nbsp; JavaCC to generate the tokenizer.<br />&nbsp;&nbsp;&nbsp; (Stanislaw Osinski via Mike McCandless)</font></p>
<p><font size="2">&nbsp;8. LUCENE-969: Changed core tokenizers &amp; filters to re-use Token and<br />&nbsp;&nbsp;&nbsp; TokenStream instances when possible to improve tokenization<br />&nbsp;&nbsp;&nbsp; performance (~10-15%). (Mike McCandless)</font></p>
<p><font size="2">&nbsp;9. LUCENE-871: Speedup ISOLatin1AccentFilter (Ian Boston via Mike<br />&nbsp;&nbsp;&nbsp; McCandless)</font></p>
<p><font size="2">10. LUCENE-986: Refactored SegmentInfos from IndexReader into the new<br />&nbsp;&nbsp;&nbsp; subclass DirectoryIndexReader. SegmentReader and MultiSegmentReader<br />&nbsp;&nbsp;&nbsp; now extend DirectoryIndexReader and are the only IndexReader <br />&nbsp;&nbsp;&nbsp; implementations that use SegmentInfos to access an index and <br />&nbsp;&nbsp;&nbsp; acquire a write lock for index modifications. (Michael Busch)</font></p>
<p><font size="2">11. LUCENE-1007: Allow flushing in IndexWriter to be triggered by<br />&nbsp;&nbsp;&nbsp; either RAM usage or document count or both (whichever comes<br />&nbsp;&nbsp;&nbsp; first), by adding symbolic constant DISABLE_AUTO_FLUSH to disable<br />&nbsp;&nbsp;&nbsp; one of the flush triggers.&nbsp; (Ning Li via Mike McCandless)</font></p>
<p><font size="2">12. LUCENE-1043: Speed up merging of stored fields by bulk-copying the<br />&nbsp;&nbsp;&nbsp; raw bytes for each contiguous range of non-deleted documents.<br />&nbsp;&nbsp;&nbsp; (Robert Engels via Mike McCandless)</font></p>
<p><font size="2">13. LUCENE-693: Speed up nested conjunctions (~2x) that match many<br />&nbsp;&nbsp;&nbsp; documents, and a slight performance increase for top level<br />&nbsp;&nbsp;&nbsp; conjunctions.&nbsp; (yonik)</font></p>
<p><font size="2">14. LUCENE-1098: Make inner class StandardAnalyzer.SavedStreams static <br />&nbsp;&nbsp;&nbsp; and final. (Nathan Beyer via Michael Busch)</font></p>
<p><font size="2">Documentation</font></p>
<p><font size="2">&nbsp;1. LUCENE-1051: Generate separate javadocs for core, demo and contrib<br />&nbsp;&nbsp;&nbsp; classes, as well as an unified view. Also add an appropriate menu <br />&nbsp;&nbsp;&nbsp; structure to the website. (Michael Busch)</font></p>
<p><font size="2">&nbsp;2. LUCENE-746: Fix error message in AnalyzingQueryParser.getPrefixQuery.<br />&nbsp;&nbsp;&nbsp; (Ronnie Kolehmainen via Michael Busch)</font></p>
<p><font size="2">Build</font></p>
<p><font size="2">&nbsp;1. LUCENE-908: Improvements and simplifications for how the MANIFEST<br />&nbsp;&nbsp;&nbsp; file and the META-INF dir are created. (Michael Busch)</font></p>
<p><font size="2">&nbsp;2. LUCENE-935: Various improvements for the maven artifacts. Now the<br />&nbsp;&nbsp;&nbsp; artifacts also include the sources as .jar files. (Michael Busch)</font></p>
<p><font size="2">&nbsp;3. Added apply-patch target to top-level build.&nbsp; Defaults to looking for<br />&nbsp;&nbsp;&nbsp; a patch in ${basedir}/../patches with name specified by -Dpatch.name.<br />&nbsp;&nbsp;&nbsp; Can also specify any location by -Dpatch.file property on the command<br />&nbsp;&nbsp;&nbsp; line.&nbsp; This should be helpful for easy application of patches, but it<br />&nbsp;&nbsp;&nbsp; is also a step towards integrating automatic patch application with<br />&nbsp;&nbsp;&nbsp; JIRA and Hudson, and is thus subject to change.&nbsp; (Grant Ingersoll)<br />&nbsp;<br />&nbsp;4. LUCENE-935: Defined property &quot;m2.repository.url&quot; to allow setting<br />&nbsp;&nbsp;&nbsp; the url to a maven remote repository to deploy to. (Michael Busch)</font></p>
<p><font size="2">&nbsp;5. LUCENE-1051: Include javadocs in the maven artifacts. (Michael Busch)</font></p>
<p><font size="2">&nbsp;6. LUCENE-1055: Remove gdata-server from build files and its sources <br />&nbsp;&nbsp;&nbsp; from trunk. (Michael Busch)</font></p>
<p><font size="2">&nbsp;7. LUCENE-935: Allow to deploy maven artifacts to a remote m2 repository<br />&nbsp;&nbsp;&nbsp; via scp and ssh authentication. (Michael Busch)<br />&nbsp;<br />&nbsp;8. LUCENE-1123: Allow overriding the specification version for <br />&nbsp;&nbsp;&nbsp; MANIFEST.MF (Michael Busch)</font></p>
<p><font size="2">Test Cases</font></p>
<p><font size="2">&nbsp;1. LUCENE-766: Test adding two fields with the same name but different <br />&nbsp;&nbsp;&nbsp; term vector setting.&nbsp; (Nicolas Lalev&Atilde;&copy;e via Doron Cohen)&nbsp; </font></p>
<p><br /><font size="2">下载地址:<a href="http://apache.mirror.phpchina.com/lucene/java/">http://apache.mirror.phpchina.com/lucene/java/</a><br /></font></p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.kinroc.com/blog/article/development/80.htm" /> 
	  <id>http://www.kinroc.com/blog/default.asp?id=80</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[SQL语句中的JOIN]]></title>
	  <author>
		 <name>kinroc</name>
		 <uri>http://www.kinroc.com/blog/</uri>
		 <email>kinroc@kinroc.com</email>
	  </author>
	  <category term="" scheme="http://www.kinroc.com/blog/default.asp?cateID=5" label="Development" /> 
	  <updated>2008-01-03T16:07:02+08:00</updated>
	  <published>2008-01-03T16:07:02+08:00</published>
		  <summary type="html"><![CDATA[<p><font size="2">今天研究了一下join的用法，从网上找了一些资料：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
jion 语句有三种，inner join, left outer join 和 right outer join 都可以简写，分别为join,left join,right join。 join语句可以用来组合两个表中的记录，只要在公共字段之中有相符的值即可,该语句联合两个表查询得到的结果是可以添加新的数据，可以把它看成将两个具有相关内容的表联接在一起新生成的表，而一般的select 语句没有这个功能。1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 内连接，inner join ... on&nbsp;&nbsp;&nbsp; 语句格式:<br />
&nbsp;&nbsp;&nbsp; FROM (((表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号) INNER JOIN 表4 ON Member.字段号=表4.字段号) INNER JOIN 表X ON Member.字段号=表X.字段号</font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp; 例子:</font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp; Select *</font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp; FROM (((Member INNER JOIN MemberSort ON Member.MemberSort=MemberSort.MemberSort) INNER JOIN MemberLevel ON Member.MemberLevel=MemberLevel.MemberLevel) INNER JOIN MemberIdentity ON Member.MemberIdentity=MemberIdentity.MemberIdentity) INNER JOIN Wedlock ON Member.Wedlock=Wedlock.Wedlock</font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp; orDER BY MemberDate DESC</font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp; 内连接的功能是，把两个表相关联的记录列出来，必须是相关联的记录。</font></p>
<p><font size="2">&nbsp;&nbsp; 2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 左外连接，left outer join ... on</font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp; 语句格式:</font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM [表名1] LEFT JOIN [表名2]</font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ON [表名1.字段A] 〈关系运算符〉[表名2.字段B]</font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp; 其实LEFT JOIN 的功能就是将LEFT左边的表名1中的所有记录全部保留，而将右边的表名2中的字段B与表名1.字段A相对应的记录显示出来(当使用Select * 时)。而RIGHT JOIN 和LEFT JOIN 相反。</font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp; 外连接的功能是，把LEFT左边的表中的所有记录保留，而右边表只保留相关联的记录,也就是先执行一次INNER JOIN,然后把LEFT左边的表中的与右边表没有任何关联的记录也保留，而右边表的字段为null.</font></p>
<p><font size="2">3)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 右外连接，right outer join ... on</font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp; 与 left join左右相反。</font></p>
<p><font size="2">4)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 全连接，full join ... on(不常使用，只能用于outer) </font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp; 功能结合了以上三种联军，先执行一次inner join,然后把两个表的多余字段都保留，但连接的对应字段为null.</font></p>
<p><font size="2">如果想将几个表联接起来，在JOIN操作中我们可以进行嵌套操作，有三个表：表1、表2、表3，现在将三个表联接起来：</font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM （表1 INNER JOIN 表2 ON 表1.序号=表2.序号）</font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INNER JOIN 表3 ON 表1.序号=表3.序号</font></p>
<p><font size="2">=====================</font></p>
<p><font size="2">在一个正规化的数据库环境中, 我们常会碰到这款情形: 所需的资料并不是放在同一个资料表中, 在这个时候, 你就要用到 Join <br />
当然 Join 如何将不同的数据库的资料结合, 还要看你如何使用它, 一共有四种不同的 Join 的方式, 在这篇文章中我们将为你介绍 Inner Join 及 Outer Join 以及其应用 <br />
Inner Join <br />
Inner Join 应该是最常用的 Join 方式, 它只会传回符合 Join 规则的纪录, 还是先来看看语法 <br />
Select &lt;要选择的字段&gt; From &lt;主要资料表&gt; <br />
&lt;Join 方式&gt; &lt;次要资料表&gt; [On &lt;Join 规则&gt;] <br />
现在我们利用 MS SQL 内建的北风数据库来实际练习一下! 想多了解 MS SQL 的内建数据库, 你可以看看 SQL Server 的内建数据库 这篇文章 <br />
请打开 QA (Query Analyzer), 为了使用北风数据库, 请先执行 Use Northwind, 然后执行 <br />
Select ProductId, ProductName, SupplierId From Products <br />
从 Products 产品资料表中取出三个字段, 分别是产品代码, 产品名称, 供货商代码, 但查询出来的结果保证让你的老板很不满意, 因为供货商代码对于人类实在是无虾米意义, 这个时候 Join 就可以帮上忙了, 藉由 Join Suppliers 这个资料表我们便可以查询到供货商名称 <br />
Select ProductId, ProductName, Suppliers.SupplierId <br />
From Products <br />
Inner Join Suppliers <br />
Products.Suppliers = Suppliers.SupplierId <br />
这款的查询结果是不是卡清楚呢! Inner Join 的主要精神就是 exclusive , 叫它做排他性吧! 就是讲 Join 规则不相符的资料就会被排除掉, 譬如讲在 Product 中有一项产品的供货商代码 (SupplierId), 没有出现在 Suppliers 资料表中, 那么这笔记录便会被排除掉 <br />
Outer Join <br />
这款的 Join 方式是一般人比较少用到的, 甚至有些 SQL 的管理者也从未用过, 这真是一件悲哀的代志, 因为善用 Outer Join 是可以简化一些查询的工作的, 先来看看 Outer Join 的语法 <br />
Select &lt;要查询的字段&gt; From &lt;Left 资料表&gt; <br />
&lt;Left | Right&gt; [Outer] Join &lt;Right 资料表&gt; On &lt;Join 规则&gt; <br />
语法中的 Outer 是可以省略的, 例如你可以用 Left Join 或是 Right Join, 在本质上, Outer Join 是 inclusive, 叫它做包容性吧! 不同于 Inner Join 的排他性, 因此在 Left Outer Join 的查询结果会包含所有 Left 资料表的资料, 颠倒过来讲, Right Outer Join 的查询就会包含所有 Right 资料表的资料, 接下来我们还是来做些实际操作, 仍然是使用北风数据库, 但要先做一些小小的修改, 才能达到我们要的结果 <br />
首先要拿掉 Products 资料表的 Foreign Key, 否则没有法度在 Products 资料表新增一笔 SupplierId 没有对映到 Suppliers 资料表的纪录, 要知影一个资料表的 Constraint 你可以执行 SQL 内建的 sp_helpconstraint , 在 QA 执行 <br />
sp_helpconstraint Products <br />
接下来删除 FK_Products_Suppliers 这个 Foreign Key <br />
Alter Table Products <br />
Drop Constraint FK_Products_Suppliers <br />
再来新增一笔纪录于 Products 资料表, SupplierId 使用 50 是因为它并没有对映到 Suppliers 资料表中的记录 <br />
Insert Into Products (ProductName,SupplierId,CategoryId) <br />
values ('Test Product','50','1') <br />
现在我们再执行头前的查询, 只是将 Inner Join 改为 Left Outer Join <br />
Select ProductId, ProductName, Suppliers.SupplierId <br />
From Products <br />
Left Outer Join Suppliers <br />
Products.Suppliers = Suppliers.SupplierId <br />
比较一下两种 Join 方式的查询结果, 你应该就会知影其中的差别! <br />
再来看看 Right Outer Join, 请新增下底这笔记录 <br />
Insert Into Suppliers (CompanyName) <br />
values ('LearnASP') <br />
现在请使用 Right Out Join 来作查询, 比较看看查询的结果和 Inner Join 有什么不同! <br />
寻找不相符纪录 <br />
这里我们来看看如何使用 Out Join 来找不相符纪录, 可能是有子纪录却没有父纪录或是颠倒过来 <br />
Select Suppliers.CompanyName From Products <br />
Right Join Suppliers <br />
On Products.SupplierId = Suppliers.SupplierId <br />
Where Products.SupplierId is Null <br />
执行结果你会找到一笔资料为 LearnASP, 该笔供货商资料存在, 但基本上已经没有产品是来自这个供货商, 想象一下如果不用 Outer Join 你要怎么以一个 SQL 指令完成同一查询结果! 知道 Outer Join 的好用了吧! 再执行 <br />
Select Products.ProductName <br />
From Products <br />
Left Join Suppliers <br />
On Products.SupplierId = Suppliers.SupplierId <br />
Where Suppliers.SupplierId is Null <br />
这个查询结果你会发现 Test Product 这项产品竟然找不到供货商的资料! </font></p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.kinroc.com/blog/article/development/71.htm" /> 
	  <id>http://www.kinroc.com/blog/default.asp?id=71</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[输入汉字自动转为拼音(jsp实现方式)]]></title>
	  <author>
		 <name>kinroc</name>
		 <uri>http://www.kinroc.com/blog/</uri>
		 <email>kinroc@kinroc.com</email>
	  </author>
	  <category term="" scheme="http://www.kinroc.com/blog/default.asp?cateID=5" label="Development" /> 
	  <updated>2007-12-16T13:42:38+08:00</updated>
	  <published>2007-12-16T13:42:38+08:00</published>
		  <summary type="html"><![CDATA[<p><font size="2">输入汉字，点击&ldquo;提交&rdquo;按钮，所输入汉字的拼音就会自动输入出来，该实现方式是在互联网上找到的，但是我做了一些修改，使其用起来更加明了 。 <br />
<span class="Code">&lt;%...@ page language=&quot;java&quot; import=&quot;java.util.*&quot; contentType=&quot;text/html; charset=GBK&quot; %&gt;<br />
&lt;%...!<br />
Hashtable ht=new Hashtable(10);<br />
String g(Integer n){<br />
&nbsp;int num=n.intValue();<br />
&nbsp;if(num&gt;0&amp;&amp;num&lt;160){<br />
&nbsp; return String.valueOf((char)num);<br />
&nbsp;}<br />
&nbsp;else if(num&lt;-20319||num&gt;-10247){<br />
&nbsp; return &quot;&quot;;<br />
&nbsp;}<br />
&nbsp;else{<br />
&nbsp; if(ht.size()==0){b();}<br />
&nbsp; while(!ht.containsKey(Integer.toString(num)))num--;<br />
&nbsp; return ht.get(Integer.toString(num)).toString();<br />
&nbsp;}<br />
}<br />
String c(String str){<br />
&nbsp;char[] hz=str.toCharArray();<br />
&nbsp;int len=str.length();<br />
&nbsp;int p,q;<br />
&nbsp;String ret=&quot;&quot;;<br />
&nbsp;for(int i=0;i&lt;len;i++){<br />
&nbsp; p=(int)hz[i];<br />
&nbsp; if(p&gt;160){<br />
&nbsp;&nbsp; q=(int)hz[++i];<br />
&nbsp;&nbsp; p=p*256+q-65536;<br />
&nbsp; }<br />
&nbsp; ret+=g(new Integer(p));<br />
&nbsp; ret=ret+&quot;&lt;b&gt;&quot;+String.valueOf(p)+&quot;&lt;/b&gt;&lt;br&gt;&quot;;<br />
&nbsp;}<br />
&nbsp;return ret;<br />
}<br />
void b(){<br />
&nbsp;ht.put(&quot;-20319&quot;,&quot;a&quot;);<br />
&nbsp;ht.put(&quot;-20317&quot;,&quot;ai&quot;);<br />
&nbsp;ht.put(&quot;-20304&quot;,&quot;an&quot;);<br />
&nbsp;ht.put(&quot;-20295&quot;,&quot;ang&quot;);<br />
&nbsp;ht.put(&quot;-20292&quot;,&quot;ao&quot;);<br />
&nbsp;ht.put(&quot;-20283&quot;,&quot;ba&quot;);<br />
&nbsp;ht.put(&quot;-20265&quot;,&quot;bai&quot;);<br />
&nbsp;ht.put(&quot;-20257&quot;,&quot;ban&quot;);<br />
&nbsp;ht.put(&quot;-20242&quot;,&quot;bang&quot;);<br />
&nbsp;ht.put(&quot;-20230&quot;,&quot;bao&quot;);<br />
&nbsp;ht.put(&quot;-20051&quot;,&quot;bei&quot;);<br />
&nbsp;ht.put(&quot;-20036&quot;,&quot;ben&quot;);<br />
&nbsp;ht.put(&quot;-20032&quot;,&quot;beng&quot;);<br />
&nbsp;ht.put(&quot;-20026&quot;,&quot;bi&quot;);<br />
&nbsp;ht.put(&quot;-20002&quot;,&quot;bian&quot;);<br />
&nbsp;ht.put(&quot;-19990&quot;,&quot;biao&quot;);<br />
&nbsp;ht.put(&quot;-19986&quot;,&quot;bie&quot;);<br />
&nbsp;ht.put(&quot;-19982&quot;,&quot;bin&quot;);<br />
&nbsp;ht.put(&quot;-19976&quot;,&quot;bing&quot;);<br />
&nbsp;ht.put(&quot;-19805&quot;,&quot;bo&quot;);<br />
&nbsp;ht.put(&quot;-19784&quot;,&quot;bu&quot;);<br />
&nbsp;ht.put(&quot;-19775&quot;,&quot;ca&quot;);<br />
&nbsp;ht.put(&quot;-19774&quot;,&quot;cai&quot;);<br />
&nbsp;ht.put(&quot;-19763&quot;,&quot;can&quot;);<br />
&nbsp;ht.put(&quot;-19756&quot;,&quot;cang&quot;);<br />
&nbsp;ht.put(&quot;-19751&quot;,&quot;cao&quot;);<br />
&nbsp;ht.put(&quot;-19746&quot;,&quot;ce&quot;);<br />
&nbsp;ht.put(&quot;-19741&quot;,&quot;ceng&quot;);<br />
&nbsp;ht.put(&quot;-19739&quot;,&quot;cha&quot;);<br />
&nbsp;ht.put(&quot;-19728&quot;,&quot;chai&quot;);<br />
&nbsp;ht.put(&quot;-19725&quot;,&quot;chan&quot;);<br />
&nbsp;ht.put(&quot;-19715&quot;,&quot;chang&quot;);<br />
&nbsp;ht.put(&quot;-19540&quot;,&quot;chao&quot;);<br />
&nbsp;ht.put(&quot;-19531&quot;,&quot;che&quot;);<br />
&nbsp;ht.put(&quot;-19525&quot;,&quot;chen&quot;);<br />
&nbsp;ht.put(&quot;-19515&quot;,&quot;cheng&quot;);<br />
&nbsp;ht.put(&quot;-19500&quot;,&quot;chi&quot;);<br />
&nbsp;ht.put(&quot;-19484&quot;,&quot;chong&quot;);<br />
&nbsp;ht.put(&quot;-19479&quot;,&quot;chou&quot;);<br />
&nbsp;ht.put(&quot;-19467&quot;,&quot;chu&quot;);<br />
&nbsp;ht.put(&quot;-19289&quot;,&quot;chuai&quot;);<br />
&nbsp;ht.put(&quot;-19288&quot;,&quot;chuan&quot;);<br />
&nbsp;ht.put(&quot;-19281&quot;,&quot;chuang&quot;);<br />
&nbsp;ht.put(&quot;-19275&quot;,&quot;chui&quot;);<br />
&nbsp;ht.put(&quot;-19270&quot;,&quot;chun&quot;);<br />
&nbsp;ht.put(&quot;-19263&quot;,&quot;chuo&quot;);<br />
&nbsp;ht.put(&quot;-19261&quot;,&quot;ci&quot;);<br />
&nbsp;ht.put(&quot;-19249&quot;,&quot;cong&quot;);<br />
&nbsp;ht.put(&quot;-19243&quot;,&quot;cou&quot;);<br />
&nbsp;ht.put(&quot;-19242&quot;,&quot;cu&quot;);<br />
&nbsp;ht.put(&quot;-19238&quot;,&quot;cuan&quot;);<br />
&nbsp;ht.put(&quot;-19235&quot;,&quot;cui&quot;);<br />
&nbsp;ht.put(&quot;-19227&quot;,&quot;cun&quot;);<br />
&nbsp;ht.put(&quot;-19224&quot;,&quot;cuo&quot;);<br />
&nbsp;ht.put(&quot;-19218&quot;,&quot;da&quot;);<br />
&nbsp;ht.put(&quot;-19212&quot;,&quot;dai&quot;);<br />
&nbsp;ht.put(&quot;-19038&quot;,&quot;dan&quot;);<br />
&nbsp;ht.put(&quot;-19023&quot;,&quot;dang&quot;);<br />
&nbsp;ht.put(&quot;-19018&quot;,&quot;dao&quot;);<br />
&nbsp;ht.put(&quot;-19006&quot;,&quot;de&quot;);<br />
&nbsp;ht.put(&quot;-19003&quot;,&quot;deng&quot;);<br />
&nbsp;ht.put(&quot;-18996&quot;,&quot;di&quot;);<br />
&nbsp;ht.put(&quot;-18977&quot;,&quot;dian&quot;);<br />
&nbsp;ht.put(&quot;-18961&quot;,&quot;diao&quot;);<br />
&nbsp;ht.put(&quot;-18952&quot;,&quot;die&quot;);<br />
&nbsp;ht.put(&quot;-18783&quot;,&quot;ding&quot;);<br />
&nbsp;ht.put(&quot;-18774&quot;,&quot;diu&quot;);<br />
&nbsp;ht.put(&quot;-18773&quot;,&quot;dong&quot;);<br />
&nbsp;ht.put(&quot;-18763&quot;,&quot;dou&quot;);<br />
&nbsp;ht.put(&quot;-18756&quot;,&quot;du&quot;);<br />
&nbsp;ht.put(&quot;-18741&quot;,&quot;duan&quot;);<br />
&nbsp;ht.put(&quot;-18735&quot;,&quot;dui&quot;);<br />
&nbsp;ht.put(&quot;-18731&quot;,&quot;dun&quot;);<br />
&nbsp;ht.put(&quot;-18722&quot;,&quot;duo&quot;);<br />
&nbsp;ht.put(&quot;-18710&quot;,&quot;e&quot;);<br />
&nbsp;ht.put(&quot;-18697&quot;,&quot;en&quot;);<br />
&nbsp;ht.put(&quot;-18696&quot;,&quot;er&quot;);<br />
&nbsp;ht.put(&quot;-18526&quot;,&quot;fa&quot;);<br />
&nbsp;ht.put(&quot;-18518&quot;,&quot;fan&quot;);<br />
&nbsp;ht.put(&quot;-18501&quot;,&quot;fang&quot;);<br />
&nbsp;ht.put(&quot;-18490&quot;,&quot;fei&quot;);<br />
&nbsp;ht.put(&quot;-18478&quot;,&quot;fen&quot;);<br />
&nbsp;ht.put(&quot;-18463&quot;,&quot;feng&quot;);<br />
&nbsp;ht.put(&quot;-18448&quot;,&quot;fo&quot;);<br />
&nbsp;ht.put(&quot;-18447&quot;,&quot;fou&quot;);<br />
&nbsp;ht.put(&quot;-18446&quot;,&quot;fu&quot;);<br />
&nbsp;ht.put(&quot;-18239&quot;,&quot;ga&quot;);<br />
&nbsp;ht.put(&quot;-18237&quot;,&quot;gai&quot;);<br />
&nbsp;ht.put(&quot;-18231&quot;,&quot;gan&quot;);<br />
&nbsp;ht.put(&quot;-18220&quot;,&quot;gang&quot;);<br />
&nbsp;ht.put(&quot;-18211&quot;,&quot;gao&quot;);<br />
&nbsp;ht.put(&quot;-18201&quot;,&quot;ge&quot;);<br />
&nbsp;ht.put(&quot;-18184&quot;,&quot;gei&quot;);<br />
&nbsp;ht.put(&quot;-18183&quot;,&quot;gen&quot;);<br />
&nbsp;ht.put(&quot;-18181&quot;,&quot;geng&quot;);<br />
&nbsp;ht.put(&quot;-18012&quot;,&quot;gong&quot;);<br />
&nbsp;ht.put(&quot;-17997&quot;,&quot;gou&quot;);<br />
&nbsp;ht.put(&quot;-17988&quot;,&quot;gu&quot;);<br />
&nbsp;ht.put(&quot;-17970&quot;,&quot;gua&quot;);<br />
&nbsp;ht.put(&quot;-17964&quot;,&quot;guai&quot;);<br />
&nbsp;ht.put(&quot;-17961&quot;,&quot;guan&quot;);<br />
&nbsp;ht.put(&quot;-17950&quot;,&quot;guang&quot;);<br />
&nbsp;ht.put(&quot;-17947&quot;,&quot;gui&quot;);<br />
&nbsp;ht.put(&quot;-17931&quot;,&quot;gun&quot;);<br />
&nbsp;ht.put(&quot;-17928&quot;,&quot;guo&quot;);<br />
&nbsp;ht.put(&quot;-17922&quot;,&quot;ha&quot;);<br />
&nbsp;ht.put(&quot;-17759&quot;,&quot;hai&quot;);<br />
&nbsp;ht.put(&quot;-17752&quot;,&quot;han&quot;);<br />
&nbsp;ht.put(&quot;-17733&quot;,&quot;hang&quot;);<br />
&nbsp;ht.put(&quot;-17730&quot;,&quot;hao&quot;);<br />
&nbsp;ht.put(&quot;-17721&quot;,&quot;he&quot;);<br />
&nbsp;ht.put(&quot;-17703&quot;,&quot;hei&quot;);<br />
&nbsp;ht.put(&quot;-17701&quot;,&quot;hen&quot;);<br />
&nbsp;ht.put(&quot;-17697&quot;,&quot;heng&quot;);<br />
&nbsp;ht.put(&quot;-17692&quot;,&quot;hong&quot;);<br />
&nbsp;ht.put(&quot;-17683&quot;,&quot;hou&quot;);<br />
&nbsp;ht.put(&quot;-17676&quot;,&quot;hu&quot;);<br />
&nbsp;ht.put(&quot;-17496&quot;,&quot;hua&quot;);<br />
&nbsp;ht.put(&quot;-17487&quot;,&quot;huai&quot;);<br />
&nbsp;ht.put(&quot;-17482&quot;,&quot;huan&quot;);<br />
&nbsp;ht.put(&quot;-17468&quot;,&quot;huang&quot;);<br />
&nbsp;ht.put(&quot;-17454&quot;,&quot;hui&quot;);<br />
&nbsp;ht.put(&quot;-17433&quot;,&quot;hun&quot;);<br />
&nbsp;ht.put(&quot;-17427&quot;,&quot;huo&quot;);<br />
&nbsp;ht.put(&quot;-17417&quot;,&quot;ji&quot;);<br />
&nbsp;ht.put(&quot;-17202&quot;,&quot;jia&quot;);<br />
&nbsp;ht.put(&quot;-17185&quot;,&quot;jian&quot;);<br />
&nbsp;ht.put(&quot;-16983&quot;,&quot;jiang&quot;);<br />
&nbsp;ht.put(&quot;-16970&quot;,&quot;jiao&quot;);<br />
&nbsp;ht.put(&quot;-16942&quot;,&quot;jie&quot;);<br />
&nbsp;ht.put(&quot;-16915&quot;,&quot;jin&quot;);<br />
&nbsp;ht.put(&quot;-16733&quot;,&quot;jing&quot;);<br />
&nbsp;ht.put(&quot;-16708&quot;,&quot;jiong&quot;);<br />
&nbsp;ht.put(&quot;-16706&quot;,&quot;jiu&quot;);<br />
&nbsp;ht.put(&quot;-16689&quot;,&quot;ju&quot;);<br />
&nbsp;ht.put(&quot;-16664&quot;,&quot;juan&quot;);<br />
&nbsp;ht.put(&quot;-16657&quot;,&quot;jue&quot;);<br />
&nbsp;ht.put(&quot;-16647&quot;,&quot;jun&quot;);<br />
&nbsp;ht.put(&quot;-16474&quot;,&quot;ka&quot;);<br />
&nbsp;ht.put(&quot;-16470&quot;,&quot;kai&quot;);<br />
&nbsp;ht.put(&quot;-16465&quot;,&quot;kan&quot;);<br />
&nbsp;ht.put(&quot;-16459&quot;,&quot;kang&quot;);<br />
&nbsp;ht.put(&quot;-16452&quot;,&quot;kao&quot;);<br />
&nbsp;ht.put(&quot;-16448&quot;,&quot;ke&quot;);<br />
&nbsp;ht.put(&quot;-16433&quot;,&quot;ken&quot;);<br />
&nbsp;ht.put(&quot;-16429&quot;,&quot;keng&quot;);<br />
&nbsp;ht.put(&quot;-16427&quot;,&quot;kong&quot;);<br />
&nbsp;ht.put(&quot;-16423&quot;,&quot;kou&quot;);<br />
&nbsp;ht.put(&quot;-16419&quot;,&quot;ku&quot;);<br />
&nbsp;ht.put(&quot;-16412&quot;,&quot;kua&quot;);<br />
&nbsp;ht.put(&quot;-16407&quot;,&quot;kuai&quot;);<br />
&nbsp;ht.put(&quot;-16403&quot;,&quot;kuan&quot;);<br />
&nbsp;ht.put(&quot;-16401&quot;,&quot;kuang&quot;);<br />
&nbsp;ht.put(&quot;-16393&quot;,&quot;kui&quot;);<br />
&nbsp;ht.put(&quot;-16220&quot;,&quot;kun&quot;);<br />
&nbsp;ht.put(&quot;-16216&quot;,&quot;kuo&quot;);<br />
&nbsp;ht.put(&quot;-16212&quot;,&quot;la&quot;);<br />
&nbsp;ht.put(&quot;-16205&quot;,&quot;lai&quot;);<br />
&nbsp;ht.put(&quot;-16202&quot;,&quot;lan&quot;);<br />
&nbsp;ht.put(&quot;-16187&quot;,&quot;lang&quot;);<br />
&nbsp;ht.put(&quot;-16180&quot;,&quot;lao&quot;);<br />
&nbsp;ht.put(&quot;-16171&quot;,&quot;le&quot;);<br />
&nbsp;ht.put(&quot;-16169&quot;,&quot;lei&quot;);<br />
&nbsp;ht.put(&quot;-16158&quot;,&quot;leng&quot;);<br />
&nbsp;ht.put(&quot;-16155&quot;,&quot;li&quot;);<br />
&nbsp;ht.put(&quot;-15959&quot;,&quot;lia&quot;);<br />
&nbsp;ht.put(&quot;-15958&quot;,&quot;lian&quot;);<br />
&nbsp;ht.put(&quot;-15944&quot;,&quot;liang&quot;);<br />
&nbsp;ht.put(&quot;-15933&quot;,&quot;liao&quot;);<br />
&nbsp;ht.put(&quot;-15920&quot;,&quot;lie&quot;);<br />
&nbsp;ht.put(&quot;-15915&quot;,&quot;lin&quot;);<br />
&nbsp;ht.put(&quot;-15903&quot;,&quot;ling&quot;);<br />
&nbsp;ht.put(&quot;-15889&quot;,&quot;liu&quot;);<br />
&nbsp;ht.put(&quot;-15878&quot;,&quot;long&quot;);<br />
&nbsp;ht.put(&quot;-15707&quot;,&quot;lou&quot;);<br />
&nbsp;ht.put(&quot;-15701&quot;,&quot;lu&quot;);<br />
&nbsp;ht.put(&quot;-15681&quot;,&quot;lv&quot;);<br />
&nbsp;ht.put(&quot;-15667&quot;,&quot;luan&quot;);<br />
&nbsp;ht.put(&quot;-15661&quot;,&quot;lue&quot;);<br />
&nbsp;ht.put(&quot;-15659&quot;,&quot;lun&quot;);<br />
&nbsp;ht.put(&quot;-15652&quot;,&quot;luo&quot;);<br />
&nbsp;ht.put(&quot;-15640&quot;,&quot;ma&quot;);<br />
&nbsp;ht.put(&quot;-15631&quot;,&quot;mai&quot;);<br />
&nbsp;ht.put(&quot;-15625&quot;,&quot;man&quot;);<br />
&nbsp;ht.put(&quot;-15454&quot;,&quot;mang&quot;);<br />
&nbsp;ht.put(&quot;-15448&quot;,&quot;mao&quot;);<br />
&nbsp;ht.put(&quot;-15436&quot;,&quot;me&quot;);<br />
&nbsp;ht.put(&quot;-15435&quot;,&quot;mei&quot;);<br />
&nbsp;ht.put(&quot;-15419&quot;,&quot;men&quot;);<br />
&nbsp;ht.put(&quot;-15416&quot;,&quot;meng&quot;);<br />
&nbsp;ht.put(&quot;-15408&quot;,&quot;mi&quot;);<br />
&nbsp;ht.put(&quot;-15394&quot;,&quot;mian&quot;);<br />
&nbsp;ht.put(&quot;-15385&quot;,&quot;miao&quot;);<br />
&nbsp;ht.put(&quot;-15377&quot;,&quot;mie&quot;);<br />
&nbsp;ht.put(&quot;-15375&quot;,&quot;min&quot;);<br />
&nbsp;ht.put(&quot;-15369&quot;,&quot;ming&quot;);<br />
&nbsp;ht.put(&quot;-15363&quot;,&quot;miu&quot;);<br />
&nbsp;ht.put(&quot;-15362&quot;,&quot;mo&quot;);<br />
&nbsp;ht.put(&quot;-15183&quot;,&quot;mou&quot;);<br />
&nbsp;ht.put(&quot;-15180&quot;,&quot;mu&quot;);<br />
&nbsp;ht.put(&quot;-15165&quot;,&quot;na&quot;);<br />
&nbsp;ht.put(&quot;-15158&quot;,&quot;nai&quot;);<br />
&nbsp;ht.put(&quot;-15153&quot;,&quot;nan&quot;);<br />
&nbsp;ht.put(&quot;-15150&quot;,&quot;nang&quot;);<br />
&nbsp;ht.put(&quot;-15149&quot;,&quot;nao&quot;);<br />
&nbsp;ht.put(&quot;-15144&quot;,&quot;ne&quot;);<br />
&nbsp;ht.put(&quot;-15143&quot;,&quot;nei&quot;);<br />
&nbsp;ht.put(&quot;-15141&quot;,&quot;nen&quot;);<br />
&nbsp;ht.put(&quot;-15140&quot;,&quot;neng&quot;);<br />
&nbsp;ht.put(&quot;-15139&quot;,&quot;ni&quot;);<br />
&nbsp;ht.put(&quot;-15128&quot;,&quot;nian&quot;);<br />
&nbsp;ht.put(&quot;-15121&quot;,&quot;niang&quot;);<br />
&nbsp;ht.put(&quot;-15119&quot;,&quot;niao&quot;);<br />
&nbsp;ht.put(&quot;-15117&quot;,&quot;nie&quot;);<br />
&nbsp;ht.put(&quot;-15110&quot;,&quot;nin&quot;);<br />
&nbsp;ht.put(&quot;-15109&quot;,&quot;ning&quot;);<br />
&nbsp;ht.put(&quot;-14941&quot;,&quot;niu&quot;);<br />
&nbsp;ht.put(&quot;-14937&quot;,&quot;nong&quot;);<br />
&nbsp;ht.put(&quot;-14933&quot;,&quot;nu&quot;);<br />
&nbsp;ht.put(&quot;-14930&quot;,&quot;nv&quot;);<br />
&nbsp;ht.put(&quot;-14929&quot;,&quot;nuan&quot;);<br />
&nbsp;ht.put(&quot;-14928&quot;,&quot;nue&quot;);<br />
&nbsp;ht.put(&quot;-14926&quot;,&quot;nuo&quot;);<br />
&nbsp;ht.put(&quot;-14922&quot;,&quot;o&quot;);<br />
&nbsp;ht.put(&quot;-14921&quot;,&quot;ou&quot;);<br />
&nbsp;ht.put(&quot;-14914&quot;,&quot;pa&quot;);<br />
&nbsp;ht.put(&quot;-14908&quot;,&quot;pai&quot;);<br />
&nbsp;ht.put(&quot;-14902&quot;,&quot;pan&quot;);<br />
&nbsp;ht.put(&quot;-14894&quot;,&quot;pang&quot;);<br />
&nbsp;ht.put(&quot;-14889&quot;,&quot;pao&quot;);<br />
&nbsp;ht.put(&quot;-14882&quot;,&quot;pei&quot;);<br />
&nbsp;ht.put(&quot;-14873&quot;,&quot;pen&quot;);<br />
&nbsp;ht.put(&quot;-14871&quot;,&quot;peng&quot;);<br />
&nbsp;ht.put(&quot;-14857&quot;,&quot;pi&quot;);<br />
&nbsp;ht.put(&quot;-14678&quot;,&quot;pian&quot;);<br />
&nbsp;ht.put(&quot;-14674&quot;,&quot;piao&quot;);<br />
&nbsp;ht.put(&quot;-14670&quot;,&quot;pie&quot;);<br />
&nbsp;ht.put(&quot;-14668&quot;,&quot;pin&quot;);<br />
&nbsp;ht.put(&quot;-14663&quot;,&quot;ping&quot;);<br />
&nbsp;ht.put(&quot;-14654&quot;,&quot;po&quot;);<br />
&nbsp;ht.put(&quot;-14645&quot;,&quot;pu&quot;);<br />
&nbsp;ht.put(&quot;-14630&quot;,&quot;qi&quot;);<br />
&nbsp;ht.put(&quot;-14594&quot;,&quot;qia&quot;);<br />
&nbsp;ht.put(&quot;-14429&quot;,&quot;qian&quot;);<br />
&nbsp;ht.put(&quot;-14407&quot;,&quot;qiang&quot;);<br />
&nbsp;ht.put(&quot;-14399&quot;,&quot;qiao&quot;);<br />
&nbsp;ht.put(&quot;-14384&quot;,&quot;qie&quot;);<br />
&nbsp;ht.put(&quot;-14379&quot;,&quot;qin&quot;);<br />
&nbsp;ht.put(&quot;-14368&quot;,&quot;qing&quot;);<br />
&nbsp;ht.put(&quot;-14355&quot;,&quot;qiong&quot;);<br />
&nbsp;ht.put(&quot;-14353&quot;,&quot;qiu&quot;);<br />
&nbsp;ht.put(&quot;-14345&quot;,&quot;qu&quot;);<br />
&nbsp;ht.put(&quot;-14170&quot;,&quot;quan&quot;);<br />
&nbsp;ht.put(&quot;-14159&quot;,&quot;que&quot;);<br />
&nbsp;ht.put(&quot;-14151&quot;,&quot;qun&quot;);<br />
&nbsp;ht.put(&quot;-14149&quot;,&quot;ran&quot;);<br />
&nbsp;ht.put(&quot;-14145&quot;,&quot;rang&quot;);<br />
&nbsp;ht.put(&quot;-14140&quot;,&quot;rao&quot;);<br />
&nbsp;ht.put(&quot;-14137&quot;,&quot;re&quot;);<br />
&nbsp;ht.put(&quot;-14135&quot;,&quot;ren&quot;);<br />
&nbsp;ht.put(&quot;-14125&quot;,&quot;reng&quot;);<br />
&nbsp;ht.put(&quot;-14123&quot;,&quot;ri&quot;);<br />
&nbsp;ht.put(&quot;-14122&quot;,&quot;rong&quot;);<br />
&nbsp;ht.put(&quot;-14112&quot;,&quot;rou&quot;);<br />
&nbsp;ht.put(&quot;-14109&quot;,&quot;ru&quot;);<br />
&nbsp;ht.put(&quot;-14099&quot;,&quot;ruan&quot;);<br />
&nbsp;ht.put(&quot;-14097&quot;,&quot;rui&quot;);<br />
&nbsp;ht.put(&quot;-14094&quot;,&quot;run&quot;);<br />
&nbsp;ht.put(&quot;-14092&quot;,&quot;ruo&quot;);<br />
&nbsp;ht.put(&quot;-14090&quot;,&quot;sa&quot;);<br />
&nbsp;ht.put(&quot;-14087&quot;,&quot;sai&quot;);<br />
&nbsp;ht.put(&quot;-14083&quot;,&quot;san&quot;);<br />
&nbsp;ht.put(&quot;-13917&quot;,&quot;sang&quot;);<br />
&nbsp;ht.put(&quot;-13914&quot;,&quot;sao&quot;);<br />
&nbsp;ht.put(&quot;-13910&quot;,&quot;se&quot;);<br />
&nbsp;ht.put(&quot;-13907&quot;,&quot;sen&quot;);<br />
&nbsp;ht.put(&quot;-13906&quot;,&quot;seng&quot;);<br />
&nbsp;ht.put(&quot;-13905&quot;,&quot;sha&quot;);<br />
&nbsp;ht.put(&quot;-13896&quot;,&quot;shai&quot;);<br />
&nbsp;ht.put(&quot;-13894&quot;,&quot;shan&quot;);<br />
&nbsp;ht.put(&quot;-13878&quot;,&quot;shang&quot;);<br />
&nbsp;ht.put(&quot;-13870&quot;,&quot;shao&quot;);<br />
&nbsp;ht.put(&quot;-13859&quot;,&quot;she&quot;);<br />
&nbsp;ht.put(&quot;-13847&quot;,&quot;shen&quot;);<br />
&nbsp;ht.put(&quot;-13831&quot;,&quot;sheng&quot;);<br />
&nbsp;ht.put(&quot;-13658&quot;,&quot;shi&quot;);<br />
&nbsp;ht.put(&quot;-13611&quot;,&quot;shou&quot;);<br />
&nbsp;ht.put(&quot;-13601&quot;,&quot;shu&quot;);<br />
&nbsp;ht.put(&quot;-13406&quot;,&quot;shua&quot;);<br />
&nbsp;ht.put(&quot;-13404&quot;,&quot;shuai&quot;);<br />
&nbsp;ht.put(&quot;-13400&quot;,&quot;shuan&quot;);<br />
&nbsp;ht.put(&quot;-13398&quot;,&quot;shuang&quot;);<br />
&nbsp;ht.put(&quot;-13395&quot;,&quot;shui&quot;);<br />
&nbsp;ht.put(&quot;-13391&quot;,&quot;shun&quot;);<br />
&nbsp;ht.put(&quot;-13387&quot;,&quot;shuo&quot;);<br />
&nbsp;ht.put(&quot;-13383&quot;,&quot;si&quot;);<br />
&nbsp;ht.put(&quot;-13367&quot;,&quot;song&quot;);<br />
&nbsp;ht.put(&quot;-13359&quot;,&quot;sou&quot;);<br />
&nbsp;ht.put(&quot;-13356&quot;,&quot;su&quot;);<br />
&nbsp;ht.put(&quot;-13343&quot;,&quot;suan&quot;);<br />
&nbsp;ht.put(&quot;-13340&quot;,&quot;sui&quot;);<br />
&nbsp;ht.put(&quot;-13329&quot;,&quot;sun&quot;);<br />
&nbsp;ht.put(&quot;-13326&quot;,&quot;suo&quot;);<br />
&nbsp;ht.put(&quot;-13318&quot;,&quot;ta&quot;);<br />
&nbsp;ht.put(&quot;-13147&quot;,&quot;tai&quot;);<br />
&nbsp;ht.put(&quot;-13138&quot;,&quot;tan&quot;);<br />
&nbsp;ht.put(&quot;-13120&quot;,&quot;tang&quot;);<br />
&nbsp;ht.put(&quot;-13107&quot;,&quot;tao&quot;);<br />
&nbsp;ht.put(&quot;-13096&quot;,&quot;te&quot;);<br />
&nbsp;ht.put(&quot;-13095&quot;,&quot;teng&quot;);<br />
&nbsp;ht.put(&quot;-13091&quot;,&quot;ti&quot;);<br />
&nbsp;ht.put(&quot;-13076&quot;,&quot;tian&quot;);<br />
&nbsp;ht.put(&quot;-13068&quot;,&quot;tiao&quot;);<br />
&nbsp;ht.put(&quot;-13063&quot;,&quot;tie&quot;);<br />
&nbsp;ht.put(&quot;-13060&quot;,&quot;ting&quot;);<br />
&nbsp;ht.put(&quot;-12888&quot;,&quot;tong&quot;);<br />
&nbsp;ht.put(&quot;-12875&quot;,&quot;tou&quot;);<br />
&nbsp;ht.put(&quot;-12871&quot;,&quot;tu&quot;);<br />
&nbsp;ht.put(&quot;-12860&quot;,&quot;tuan&quot;);<br />
&nbsp;ht.put(&quot;-12858&quot;,&quot;tui&quot;);<br />
&nbsp;ht.put(&quot;-12852&quot;,&quot;tun&quot;);<br />
&nbsp;ht.put(&quot;-12849&quot;,&quot;tuo&quot;);<br />
&nbsp;ht.put(&quot;-12838&quot;,&quot;wa&quot;);<br />
&nbsp;ht.put(&quot;-12831&quot;,&quot;wai&quot;);<br />
&nbsp;ht.put(&quot;-12829&quot;,&quot;wan&quot;);<br />
&nbsp;ht.put(&quot;-12812&quot;,&quot;wang&quot;);<br />
&nbsp;ht.put(&quot;-12802&quot;,&quot;wei&quot;);<br />
&nbsp;ht.put(&quot;-12607&quot;,&quot;wen&quot;);<br />
&nbsp;ht.put(&quot;-12597&quot;,&quot;weng&quot;);<br />
&nbsp;ht.put(&quot;-12594&quot;,&quot;wo&quot;);<br />
&nbsp;ht.put(&quot;-12585&quot;,&quot;wu&quot;);<br />
&nbsp;ht.put(&quot;-12556&quot;,&quot;xi&quot;);<br />
&nbsp;ht.put(&quot;-12359&quot;,&quot;xia&quot;);<br />
&nbsp;ht.put(&quot;-12346&quot;,&quot;xian&quot;);<br />
&nbsp;ht.put(&quot;-12320&quot;,&quot;xiang&quot;);<br />
&nbsp;ht.put(&quot;-12300&quot;,&quot;xiao&quot;);<br />
&nbsp;ht.put(&quot;-12120&quot;,&quot;xie&quot;);<br />
&nbsp;ht.put(&quot;-12099&quot;,&quot;xin&quot;);<br />
&nbsp;ht.put(&quot;-12089&quot;,&quot;xing&quot;);<br />
&nbsp;ht.put(&quot;-12074&quot;,&quot;xiong&quot;);<br />
&nbsp;ht.put(&quot;-12067&quot;,&quot;xiu&quot;);<br />
&nbsp;ht.put(&quot;-12058&quot;,&quot;xu&quot;);<br />
&nbsp;ht.put(&quot;-12039&quot;,&quot;xuan&quot;);<br />
&nbsp;ht.put(&quot;-11867&quot;,&quot;xue&quot;);<br />
&nbsp;ht.put(&quot;-11861&quot;,&quot;xun&quot;);<br />
&nbsp;ht.put(&quot;-11847&quot;,&quot;ya&quot;);<br />
&nbsp;ht.put(&quot;-11831&quot;,&quot;yan&quot;);<br />
&nbsp;ht.put(&quot;-11798&quot;,&quot;yang&quot;);<br />
&nbsp;ht.put(&quot;-11781&quot;,&quot;yao&quot;);<br />
&nbsp;ht.put(&quot;-11604&quot;,&quot;ye&quot;);<br />
&nbsp;ht.put(&quot;-11589&quot;,&quot;yi&quot;);<br />
&nbsp;ht.put(&quot;-11536&quot;,&quot;yin&quot;);<br />
&nbsp;ht.put(&quot;-11358&quot;,&quot;ying&quot;);<br />
&nbsp;ht.put(&quot;-11340&quot;,&quot;yo&quot;);<br />
&nbsp;ht.put(&quot;-11339&quot;,&quot;yong&quot;);<br />
&nbsp;ht.put(&quot;-11324&quot;,&quot;you&quot;);<br />
&nbsp;ht.put(&quot;-11303&quot;,&quot;yu&quot;);<br />
&nbsp;ht.put(&quot;-11097&quot;,&quot;yuan&quot;);<br />
&nbsp;ht.put(&quot;-11077&quot;,&quot;yue&quot;);<br />
&nbsp;ht.put(&quot;-11067&quot;,&quot;yun&quot;);<br />
&nbsp;ht.put(&quot;-11055&quot;,&quot;za&quot;);<br />
&nbsp;ht.put(&quot;-11052&quot;,&quot;zai&quot;);<br />
&nbsp;ht.put(&quot;-11045&quot;,&quot;zan&quot;);<br />
&nbsp;ht.put(&quot;-11041&quot;,&quot;zang&quot;);<br />
&nbsp;ht.put(&quot;-11038&quot;,&quot;zao&quot;);<br />
&nbsp;ht.put(&quot;-11024&quot;,&quot;ze&quot;);<br />
&nbsp;ht.put(&quot;-11020&quot;,&quot;zei&quot;);<br />
&nbsp;ht.put(&quot;-11019&quot;,&quot;zen&quot;);<br />
&nbsp;ht.put(&quot;-11018&quot;,&quot;zeng&quot;);<br />
&nbsp;ht.put(&quot;-11014&quot;,&quot;zha&quot;);<br />
&nbsp;ht.put(&quot;-10838&quot;,&quot;zhai&quot;);<br />
&nbsp;ht.put(&quot;-10832&quot;,&quot;zhan&quot;);<br />
&nbsp;ht.put(&quot;-10815&quot;,&quot;zhang&quot;);<br />
&nbsp;ht.put(&quot;-10800&quot;,&quot;zhao&quot;);<br />
&nbsp;ht.put(&quot;-10790&quot;,&quot;zhe&quot;);<br />
&nbsp;ht.put(&quot;-10780&quot;,&quot;zhen&quot;);<br />
&nbsp;ht.put(&quot;-10764&quot;,&quot;zheng&quot;);<br />
&nbsp;ht.put(&quot;-10587&quot;,&quot;zhi&quot;);<br />
&nbsp;ht.put(&quot;-10544&quot;,&quot;zhong&quot;);<br />
&nbsp;ht.put(&quot;-10533&quot;,&quot;zhou&quot;);<br />
&nbsp;ht.put(&quot;-10519&quot;,&quot;zhu&quot;);<br />
&nbsp;ht.put(&quot;-10331&quot;,&quot;zhua&quot;);<br />
&nbsp;ht.put(&quot;-10329&quot;,&quot;zhuai&quot;);<br />
&nbsp;ht.put(&quot;-10328&quot;,&quot;zhuan&quot;);<br />
&nbsp;ht.put(&quot;-10322&quot;,&quot;zhuang&quot;);<br />
&nbsp;ht.put(&quot;-10315&quot;,&quot;zhui&quot;);<br />
&nbsp;ht.put(&quot;-10309&quot;,&quot;zhun&quot;);<br />
&nbsp;ht.put(&quot;-10307&quot;,&quot;zhuo&quot;);<br />
&nbsp;ht.put(&quot;-10296&quot;,&quot;zi&quot;);<br />
&nbsp;ht.put(&quot;-10281&quot;,&quot;zong&quot;);<br />
&nbsp;ht.put(&quot;-10274&quot;,&quot;zou&quot;);<br />
&nbsp;ht.put(&quot;-10270&quot;,&quot;zu&quot;);<br />
&nbsp;ht.put(&quot;-10262&quot;,&quot;zuan&quot;);<br />
&nbsp;ht.put(&quot;-10260&quot;,&quot;zui&quot;);<br />
&nbsp;ht.put(&quot;-10256&quot;,&quot;zun&quot;);<br />
&nbsp;ht.put(&quot;-10254&quot;,&quot;zuo&quot;);<br />
&nbsp;ht.put(&quot;-10247&quot;,&quot;zz&quot;);<br />
}<br />
%&gt;<br />
&lt;%...<br />
if(request.getParameter(&quot;hz&quot;)!=null)<br />
{<br />
&nbsp;out.println(c(request.getParameter(&quot;hz&quot;)));<br />
}<br />
%&gt;<br />
&lt;form method=post&gt;<br />
请在此处输入中文：&lt;input name=hz&gt;<br />
&lt;input type=&quot;submit&quot; value=&quot;提交&quot;&gt;<br />
&lt;/form&gt;</span></font></p>
<p><font size="2">输入出结果格式是这样的：</font></p>
<p><font size="2">如：我输入&ldquo;请在此处输入中文&rdquo;</font></p>
<p><font size="2">输出结果为：</font></p>
<p><font size="2">qing-14357<br />
zai-11046<br />
ci-19253<br />
chu-19290<br />
shu-13596<br />
ru-14101<br />
zhong-10544<br />
wen-12604</font></p>
<p><font size="2">关面是拼音 ，后面是算出来的代号（为什么得到这样的数字，我也不知道），如果有时汉字不常用，没有加入，就只会显示出来代号，而不显示拼音，此时，你可以将其加入到里面就行了，格式如：ht.put(&quot;-10247&quot;,&quot;zz&quot;);</font></p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.kinroc.com/blog/article/development/62.htm" /> 
	  <id>http://www.kinroc.com/blog/default.asp?id=62</id>
  </entry>	
		
</feed>
