<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[TOMMYHU's blog]]></title> 
<link>http://www.tommyhu.cn/index.php</link> 
<description><![CDATA[与您分享最精彩的互联网资源 ~ 奇趣网络应用 & 新奇实用软件下载]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[TOMMYHU's blog]]></copyright>
<item>
<link>http://www.tommyhu.cn/Cigarette-dog/</link>
<title><![CDATA[G抽的不是烟，是寂寞！]]></title> 
<author>tommyhu &lt;258546962@qq.com&gt;</author>
<category><![CDATA[IT sources(网络资源)]]></category>
<pubDate>Sat, 31 Jul 2010 15:22:25 +0000</pubDate> 
<guid>http://www.tommyhu.cn/Cigarette-dog/</guid> 
<description>
<![CDATA[ 
	<span style="color: #0000FF;"><span style="font-size: 14px;">忧郁的眼神，浓密的胡茬子，G抽的不是烟，是寂寞！</span></span><br/><embed src="http://www.tudou.com/v/Nz8fNjgxowg/v.swf" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="opaque" width="480" height="400"></embed><br/>Tags - <a href="http://www.tommyhu.cn/tags/g%25E6%258A%25BD%25E7%259A%2584%25E4%25B8%258D%25E6%2598%25AF%25E7%2583%259F%25EF%25BC%258C%25E6%2598%25AF%25E5%25AF%2582%25E5%25AF%259E%25EF%25BC%2581/" rel="tag">g抽的不是烟，是寂寞！</a> , <a href="http://www.tommyhu.cn/tags/%25E5%25BC%25BA%25E6%2582%258D%25E7%259E%25AC%25E9%2597%25B4%25E5%25BF%25A7%25E9%2583%2581%25E7%259A%2584%25E7%259C%25BC%25E7%25A5%259E%25EF%25BC%258C%25E6%25B5%2593%25E5%25AF%2586%25E7%259A%2584%25E8%2583%25A1%25E8%258C%25AC%25E5%25AD%2590/" rel="tag">强悍瞬间忧郁的眼神，浓密的胡茬子</a>
]]>
</description>
</item><item>
<link>http://www.tommyhu.cn/yan-pi-tiao/</link>
<title><![CDATA[眼皮跳是怎么回事（看科学家是怎么说的）？！]]></title> 
<author>tommyhu &lt;258546962@qq.com&gt;</author>
<category><![CDATA[IT sources(网络资源)]]></category>
<pubDate>Fri, 30 Jul 2010 12:15:37 +0000</pubDate> 
<guid>http://www.tommyhu.cn/yan-pi-tiao/</guid> 
<description>
<![CDATA[ 
	<span style="font-size: 18px;"><span style="color: #FF0000;">小时候，听老妈说，眼皮跳，这下是坏掉了，不好的事情要发生了，真的是这样么么！且来看看科学家是怎么说的……</span></span><br/><span style="color: #0000FF;">先小哥我总结下，无论是你“左眼皮跳”还是“右眼皮跳”，还是“上眼皮跳”，多半是因为没有休息好，近视引起的，当然如果老是跳，那也得去医院烧些钱以求心安……</span><br/><a href="http://www.tommyhu.cn/attachment.php?fid=2074" class="highslide" onclick="return hs.expand(this)"><img src="http://www.tommyhu.cn/attachment.php?fid=2074" class="insertimage" alt="Highslide JS" title="点击图片放大" border="0" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>尽管现代医学科学早已证实老百姓常说的<span style="color: #FF0000;">“左眼跳财，右眼跳灾”毫无科学依据</span>，但仍然有很多人（特别是在农村）因为眼皮跳来看病。这说明眼皮跳的现象普遍存在，而且人们不清楚眼皮跳的原因。那么—— <br/><br/>眼皮为啥跳 <br/><br/>在医学上，眼皮称之为眼睑。眼睑有两种肌肉，一种叫做眼轮匝肌，形状似车轮，环绕着眼睛，当它收缩时眼睑就闭合；另一种肌肉叫提上睑肌，当它收缩时眼睛就睁开。这两种肌肉不断收缩、放松，眼睛就能睁开和闭合。如果支配这两种肌肉的神经受到某种因素的刺激，两种肌肉同时兴奋，就会出现反复收缩，甚至痉挛或颤动，眼皮就会不由自主地跳动。出现眼皮跳时，多数人自己感觉明显，旁人却看不出来，只有个别人能被旁人看到眼皮跳。 <br/><br/>眼皮跳用治吗 <br/><br/>眼皮跳可分为生理性和病理性两种。 <br/><br/>生理性眼皮跳不需治疗很多人经历过生理性眼皮跳，其发作是一过性的，发作时间很短，常常只是几秒钟，跳动程度也不严重。这种眼皮跳一般不需要进行特殊处理。只要闭眼睛休息一会儿，进行局部按摩或热敷一下，眼皮跳就会消失。 <br/><br/>病理性眼皮跳需要治疗有的人不光是眼皮跳，甚至连嘴角和半边脸都一起抽动，并感觉到恶心、头晕。这种眼皮跳只有在找到并消除病因后才能使之停止。其病因包括劳累、紧张和疾病。比较严重的病理性眼皮跳是面肌痉挛后引起的。这种眼皮跳是颅内疾病的征兆，主要因为支配眼皮的肌肉运动的面部神经被血管压迫，产生异常神经冲动引起，很难自愈，应当尽早请神经外科医生检查治疗。所以，如果出现长时间并逐渐加重的眼皮跳，应及时到医院就诊。 <br/><br/>============================================== <br/><br/><span style="color: #DC143C;"><span style="font-size: 18px;">眼皮跳的原因 </span></span><br/><br/>眼皮跳，很多人认为是有好的事情发生或者有不好的事情发生。 <br/><br/>从医学上讲，眼皮跳的学名是“眼睑震颤”，主要是因为眼睑内一条很薄的肌肉－轮匝肌反复收缩，起因有两种，<span style="color: #0000FF;">一种是因为休息、睡眠不足，或者是因为贫血、烟酒过度，另外一种是因为眼病引起，比如近视、远视、散光、结膜炎、角膜炎…… </span><br/>医治方法一方面要注意休息，如果严重的话可适量服用奎宁，特别严重的要到医院去哦！ <br/><br/>这里除了引用科学理论外，我对眼皮跳可能的后果作一下简单的分析，如果一个人的眼皮总跳，一方面因为休息不当或疲劳等上述原因，一方面因为不停的眼皮跳，势必会心绪不宁，在工作的时候真的可能引发出来一些意外或者错误，如果是在马路上走路、骑车甚至开车，有很大可能性导致事故发生，这基本上就是眼皮跳所引发的“祸”，至于说跳“财”恐怕只能牵强附会了！ <br/><br/>伴随生活节奏的加快，眼皮跳越来越多地困扰人们的工作生活，特别是在换季的时候。长期以来，由于面神经学这一学科没有统一的、规范的诊断和治疗标准，对“眼皮跳”说法各异，或片面或盲目，导致在治疗和预防上存在着诸多误区。 <br/><br/>一、有些人认为眼皮跳无所谓，民间有“左眼跳财，右眼跳灾”之说，尤其对左眼跳更不在意，结果延误了病情；二、一些人过于敏感，眼皮刚刚跳，马上就去治疗。期望“立竿见影”好得快，慌不择法，也不考虑后果。结果把本来是一种容易治好的常见病，变成了极为难治的疾病。三、混淆或不确定病症。错把眼皮跳都当痉挛治，更有人拿面瘫后遗症出现的眼皮跳也当痉挛治。 <br/><br/>北京伊济源面神经学研究院院长孙连桂通过对临床8000余例面神经疾病可视性病例分析后认为，无论是眼皮跳，还是面肌痉挛，除占位性病变外，多是由于精神紧张，眼肌疲劳，睡眠不足，慢性疾病前兆和面瘫后遗症等因素，使得神经功能传导减弱，眼部营养不足，毛细血管与神经末梢形成触点式粘连，牵动肌肉，导致不自主跳动。毛细血管与神经末梢接触面积增大，从触点式粘连变成线状性粘连，由跳动变成抽动，就形成了面肌痉挛，病灶也在眼部。从诊断上看，单纯的眼皮跳与面肌痉挛有着明显的区别，单纯的眼皮跳，一般面部肌肉没有凹陷、鼻唇沟不对称或面颊呈线状萎缩带；眨眼时，口轮匝肌没有牵动感。 <br/><br/>其实，眼皮跳是每个人在生活中都可能遇到的，大部分人可以在短期自行消失。所以，当眼皮刚刚跳动时，不要马上去治疗，而是要多注意休息，放松精神，保持良好的心态；同时，注意观察一下，眼皮跳是逐渐减少还是增加，有没有向下扩大的趋势和从眼周围向口角的线状牵拉感。另外，照照镜子，瞧一瞧、摸一摸有没有明显的萎缩处(凹陷处)。如果一周后眼皮仍然跳，就应该到专业医疗单位治疗！ <br/>Tags - <a href="http://www.tommyhu.cn/tags/%25E7%259C%25BC%25E7%259A%25AE%25E8%25B7%25B3%25E6%2598%25AF%25E6%2580%258E%25E4%25B9%2588%25E5%259B%259E%25E4%25BA%258B%25EF%25BC%2588%25E7%259C%258B%25E7%25A7%2591%25E5%25AD%25A6%25E5%25AE%25B6%25E6%2598%25AF%25E6%2580%258E%25E4%25B9%2588%25E8%25AF%25B4%25E7%259A%2584%25EF%25BC%2589%25EF%25BC%259F%25EF%25BC%2581/" rel="tag">眼皮跳是怎么回事（看科学家是怎么说的）？！</a> , <a href="http://www.tommyhu.cn/tags/%25E7%259C%25BC%25E7%259A%25AE%25E8%25B7%25B3%25E6%2580%258E%25E4%25B9%2588%25E5%258A%259E/" rel="tag">眼皮跳怎么办</a> , <a href="http://www.tommyhu.cn/tags/%25E5%25B7%25A6%25E7%259C%25BC%25E7%259A%25AE%25E8%25B7%25B3%25E6%2598%25AF%25E6%2580%258E%25E4%25B9%2588%25E5%259B%259E%25E4%25BA%258B/" rel="tag">左眼皮跳是怎么回事</a> , <a href="http://www.tommyhu.cn/tags/%25E5%258F%25B3%25E7%259C%25BC%25E7%259A%25AE%25E8%25B7%25B3%25E6%2598%25AF%25E6%2580%258E%25E4%25B9%2588%25E5%259B%259E%25E4%25BA%258B/" rel="tag">右眼皮跳是怎么回事</a> , <a href="http://www.tommyhu.cn/tags/%25E4%25B8%258A%25E7%259C%25BC%25E7%259A%25AE%25E8%25B7%25B3%25E6%2598%25AF%25E6%2580%258E%25E4%25B9%2588%25E5%259B%259E%25E4%25BA%258B/" rel="tag">上眼皮跳是怎么回事</a>
]]>
</description>
</item><item>
<link>http://www.tommyhu.cn/qq-gameover/</link>
<title><![CDATA[破解腾讯QQ昵称不允许输入网址]]></title> 
<author>tommyhu &lt;258546962@qq.com&gt;</author>
<category><![CDATA[IT sources(网络资源)]]></category>
<pubDate>Thu, 29 Jul 2010 14:45:06 +0000</pubDate> 
<guid>http://www.tommyhu.cn/qq-gameover/</guid> 
<description>
<![CDATA[ 
	<span style="font-size: 18px;">破解腾讯QQ昵称不允许输入网址，qq2010很好，能输入更多的字符做昵称，哥甚喜欢，想把站作为昵称，结果不允许，无奈只有出此下策！<br/>看图<br/><a href="http://www.tommyhu.cn/attachment.php?fid=2072" class="highslide" onclick="return hs.expand(this)"><img src="http://www.tommyhu.cn/attachment.php?fid=2072" class="insertimage" alt="Highslide JS" title="点击图片放大" border="0" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>估计您也看到了，不错，就是这个伟大的特殊字符“С”<br/>更多特殊字符可以到去逛逛<br/>特殊符号速查手册，原文链接：<a href="http://tommyhu.cn/special-symbols-info-manual/" target="_blank">http://tommyhu.cn/special-symbols-info-manual/</a></span><br/><br/>Tags - <a href="http://www.tommyhu.cn/tags/%25E7%25A0%25B4%25E8%25A7%25A3%25E8%2585%25BE%25E8%25AE%25AFqq%25E6%2598%25B5%25E7%25A7%25B0%25E4%25B8%258D%25E5%2585%2581%25E8%25AE%25B8%25E8%25BE%2593%25E5%2585%25A5%25E7%25BD%2591%25E5%259D%2580/" rel="tag">破解腾讯qq昵称不允许输入网址</a> , <a href="http://www.tommyhu.cn/tags/qq/" rel="tag">qq</a> , <a href="http://www.tommyhu.cn/tags/qq%25E7%25A6%2581%25E6%25AD%25A2/" rel="tag">qq禁止</a> , <a href="http://www.tommyhu.cn/tags/qq%25E5%25B1%258F%25E8%2594%25BD%25E8%25AF%258D%25E8%25AF%25AD/" rel="tag">qq屏蔽词语</a>
]]>
</description>
</item><item>
<link>http://www.tommyhu.cn/db-procedure/</link>
<title><![CDATA[数据库存储过程及使用方法讲解]]></title> 
<author>tommyhu &lt;258546962@qq.com&gt;</author>
<category><![CDATA[ASP code(代码片段)]]></category>
<pubDate>Thu, 29 Jul 2010 14:30:17 +0000</pubDate> 
<guid>http://www.tommyhu.cn/db-procedure/</guid> 
<description>
<![CDATA[ 
	数据库存储过程及使用方法讲解<br/><span style="color: #FF0000;"><span style="font-size: 18px;">什么是储存过程</span></span><br/>定义： <br/>将常用的或很复杂的工作，预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。 <br/>讲到这里,可能有人要问：这么说存储过程就是一堆SQL语句而已啊？ <br/>Microsoft公司为什么还要添加这个技术呢? <br/>那么存储过程与一般的SQL语句有什么区别呢? <br/>存储过程的优点： <br/>1.存储过程只在创造时进行编译，以后每次执行存储过程都不需再重新编译，而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。 <br/>2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时），可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。 <br/>3.存储过程可以重复使用,可减少数据库开发人员的工作量 <br/>4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权 <br/>存储过程的种类： <br/>1.系统存储过程：以sp_开头,用来进行系统的各项设定.取得信息.相关管理工作, <br/>如 sp_help就是取得指定对象的相关信息 <br/>2.扩展存储过程 以XP_开头,用来调用操作系统提供的功能 <br/>exec master..xp_cmdshell 'ping 10.8.16.1' <br/>3.用户自定义的存储过程,这是我们所指的存储过程 <br/>常用格式 <br/>Create procedure procedue_name <br/>[@parameter data_type][output] <br/>[with]&#123;recompile&#124;encryption&#125; <br/>as <br/>sql_statement <br/>解释: <br/>output：表示此参数是可传回的 <br/>with &#123;recompile&#124;encryption&#125; <br/>recompile:表示每次执行此存储过程时都重新编译一次 <br/>encryption:所创建的存储过程的内容会被加密 <br/>如: <br/>表book的内容如下 <br/>编号 书名 价格 <br/>001 C语言入门 $30 <br/>002 PowerBuilder报表开发 $52 <br/>实例1:查询表Book的内容的存储过程 <br/>create proc query_book <br/>as <br/>select * from book <br/>go <br/>exec query_book <br/>实例2:加入一笔记录到表book,并查询此表中所有书籍的总金额 <br/>Create proc insert_book <br/>@param1 char(10),@param2 varchar(20),@param3 money,@param4 money output <br/>with encryption ---------加密 <br/>as <br/>insert book(编号,书名，价格） Values(@param1,@param2,@param3) <br/>select @param4=sum(价格) from book <br/>go <br/>执行例子: <br/>declare @total_price money <br/>exec insert_book '003','Delphi 控件开发指南',$100,@total_price <br/>print '总金额为'+convert(varchar,@total_price) <br/>go <br/>存储过程的3种传回值: <br/>1.以Return传回整数 <br/>2.以output格式传回参数 <br/>3.Recordset <br/>传回值的区别: <br/>output和return都可在批次程式中用变量接收,而recordset则传回到执行批次的客户端中 <br/>实例3：设有两个表为Product,Order,其表内容如下： <br/>Product <br/>产品编号 产品名称 客户订数 <br/>001 钢笔 30 <br/>002 毛笔 50 <br/>003 铅笔 100 <br/>Order <br/>产品编号 客户名 客户订金 <br/>001 南山区 $30 <br/>002 罗湖区 $50 <br/>003 宝安区 $4 <br/>请实现按编号为连接条件,将两个表连接成一个临时表,该表只含编号.产品名.客户名.订金.总金额, <br/>总金额=订金*订数,临时表放在存储过程中 <br/>代码如下: <br/>Create proc temp_sale <br/>as <br/>select a.产品编号,a.产品名称,b.客户名,b.客户订金,a.客户订数* b.客户订金 as总金额 <br/>into #temptable from Product a inner join Order b on a.产品编号=b.产品编号 <br/>if @@error=0 <br/>print 'Good' <br/>else <br/>&n bsp; print 'Fail' <br/>go <br/><br/>存储过程介绍 <br/>一、先介绍一下什么是存储过程 <br/>存储过程是利用SQL Server所提供的Tranact-SQL语言所编写的程序。Tranact-SQL语言是SQL Server提供专为设计数据库应用程序的语言，它是应用程序和SQL Server数据库间的主要程序式设计界面。它好比Oracle数据库系统中的Pro-SQL和Informix的数据库系统能够中的Informix-4GL语言一样。这类语言主要提供以下功能，让用户可以设计出符合引用需求的程序： <br/>1)、变量说明 <br/>2)、ANSI兼容的SQL命令(如Select,Update….) <br/>3)、一般流程控制命令(if…else…、while….) <br/>4)、内部函数 <br/><br/>二、存储过程的书写格 <br/><br/>CREATE PROCEDURE [拥有者.]存储过程名[;程序编号] <br/>[(参数#1,…参数#1024)] <br/>[WITH <br/>&#123;RECOMPILE &#124; ENCRYPTION &#124; RECOMPILE, ENCRYPTION&#125; <br/>] <br/>[FOR REPLICATION] <br/>AS 程序行 <br/><br/>其中存储过程名不能超过128个字。每个存储过程中最多设定1024个参数 <br/>(SQL Server 7.0以上版本),参数的使用方法如下: <br/><br/>@参数名 数据类型 [VARYING] [=内定值] [OUTPUT] <br/><br/>每个参数名前要有一个“@”符号,每一个存储过程的参数仅为该程序内部使用,参数的类型除了IMAGE外，其他SQL Server所支持的数据类型都可使用。 <br/>[=内定值]相当于我们在建立数据库时设定一个字段的默认值，这里是为这个参数设定默认值。[OUTPUT]是用来指定该参数是既有输入又有输出值的，也就是在调用了这个存储过程时，如果所指定的参数值是我们需要输入的参数，同时也需要在结果中输出的，则该项必须为OUTPUT，而如果只是做输出参数用，可以用CURSOR，同时在使用该参数时，必须指定VARYING和OUTPUT这两个语句。 <br/><br/>例子: <br/>CREATE PROCEDURE order_tot_amt @o_id int,@p_tot int output AS <br/>SELECT @p_tot = sum(Unitprice*Quantity) <br/>FROM orderdetails <br/>WHERE ordered=@o_id <br/><br/>例子说明: <br/>该例子是建立一个简单的存储过程order_tot_amt,这个存储过程根据用户输入的定单ID号码(@o_id),由定单明细表(orderdetails)中计算该定单销售总额[单价(Unitprice)*数量(Quantity)],这一金额通过@p_tot这一参数输出给调用这一存储过程的程序 <br/><br/>三、在SQL Server中执行存储过程 <br/><br/>在SQL Server的查询分析器中，输入以下代码: <br/>declare @tot_amt int <br/>execute order_tot_amt 1,@tot_amt output <br/>select @tot_amt <br/><br/>以上代码是执行order_tot_amt这一存储过程，以计算出定单编号为1的定单销售金额，我们定义@tot_amt为输出参数，用来承接我们所要的结果 <br/><br/><br/><br/>sql语句执行的时候要先编译，然后执行。存储过程就是编译好了的一些sql语句。用的时候直接就可以用了。 <br/><br/>存储过程是由流控制和SQL语句书写的过程，这个过程经编译和优化 后存储在数据库服务器中，使用时只要调用即可。在ORACLE中，若干个 有联系的过程可以组合在一起构成程序包。 <br/>使用存储过程有以下的优点： <br/>* 存储过程的能力大大增强了SQL语言的功能和灵活性。存储过程可 以用流控制语句编写，有很强的灵活性，可以完成复杂的判断和较复杂的 运算。 <br/>* 可保证数据的安全性和完整性。 <br/># 通过存储过程可以使没有权限的用户在控制之下间接地存取数据库，从而保证数据的安全。 <br/># 通过存储过程可以使相关的动作在一起发生，从而可以维护数据库的完整性。 <br/>* 再运行存储过程前，数据库已对其进行了语法和句法分析，并给出 了优化执行方案。这种已经编译好的过程可极大地改善SQL语句的性能。 由于执行SQL语句的大部分工作已经完成，所以存储过程能以极快的速度执 行。 <br/>* 可以降低网络的通信量。 <br/>* 使体现企业规则的运算程序放入数据库服务器中，以便： <br/># 集中控制。 <br/># 当企业规则发生变化时在服务器中改变存储过程即可，无须修改 任何应用程序。企业规则的特点是要经常变化，如果把体现企业规则的运 算程序放入应用程序中，则当企业规则发生变化时，就需要修改应用程序 工作量非常之大（修改、发行和安装应用程序）。如果把体现企业规则的 运算放入存储过程中，则当企业规则发生变化时，只要修改存储过程就可 以了，应用程序无须任何变化。 <br/><hr/><br/><a href="http://www.tommyhu.cn/attachment.php?fid=2071" class="highslide" onclick="return hs.expand(this)"><img src="http://www.tommyhu.cn/attachment.php?fid=2071" class="insertimage" alt="Highslide JS" title="点击图片放大" border="0" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>赛迪网专题地址：<a href="http://tech.ccidnet.com/zt/guocheng/" target="_blank">http://tech.ccidnet.com/zt/guocheng/</a><br/><br/><span style="color: #FF1493;"><span style="font-size: 18px;">asp使用存储过程实例代码</span></span><br/><br/><textarea name="code" class="vb" rows="15" cols="100">
使用存储过程备份数据库
为了维护和有效管理数据库数据，需要经常备份数据库。使用存储过程编写备份数据库的代码，调用该存储过程可以备份指定数据库，方便用户操作。
例如，创建包含参数的存储过程，该存储过程执行BACKUP DATABASE语句备份指定的数据库，然后使用CALL语句调用该存储过程，其中变量“DBName”表示数据库名称，变量“str”表示备份数据库的完整路径，代码如下：
<%
Conn.Execute("create procedure dbcopy @DB_name varchar(50),@cname varchar(200) as backup database @DB_name to disk=@cname")
Conn.Execute("&#123;call dbcopy ('"&amp;DBName&amp;"','"&amp;str&amp;"')&#125;")
%>
下面创建包含3个参数的存储过程，3个参数分别代表数据库名称、备份路径和备份数据库的名称，执行该存储过程备份数据库。程序代码如下：
<%
'删除同名的存储过程
crstr="select name from sysobjects where name='dbcopy' and type='p'"
Set rs=Conn.Execute(crstr)
If Not rs.eof Then Conn.Execute("drop procedure dbcopy")
Set rs=Nothing
'创建并执行存储过程,备份数据库
crstr="create procedure dbcopy @DB_name varchar(50),@cname varchar(200) as backup database @DB_name to disk=@cname"
Conn.Execute(crstr)
crstr="&#123;call dbcopy ('"&amp;DBName&amp;"','"&amp;str&amp;"')&#125;"
Conn.Execute(crstr)
%>
</textarea><br/><span style="color: #FF1493;"><span style="font-size: 18px;">c#使用存储过程实例代码</span></span><br/><textarea name="code" class="C#" rows="15" cols="100">
在业务代码中，可以将sql语句写成数据库的存储，这样代码会非常简洁，输入也不容易出错。更重要的是，存储过程可以写入多条的语句，对于需要得到数据库操作结果的模块非常有用。比如下面，要插入一条记录到数据库的最后一行，并且返回结果（插入的行号），如果用sql语句，要分成两次查询：

 ThisCommand.CommandText = "Insert into SmsOutSquence (Content, Terminal, State, UserId, SubmitTime) VALUES('" + smsContent + "','" + t + "','" + 0 + "','" + userId + "','" + nowTime + "')";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SqlDataReader ThisReader = ThisCommand.ExecuteReader();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ThisReader.Close();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ThisCommand.CommandText = "SELECT * FROM SmsOutSquence WHERE SmsId = (SELECT max(SmsID) FROM SmsOutSquence)";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ThisReader = ThisCommand.ExecuteReader();

非常麻烦。这个时候我们可以用存储过程来处理。

先要针对这个目的建立一个存储过程：

CREATE PROCEDURE CMPP30_SubmitNewSms
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @smsContent varchar(140),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @t varchar(1100),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @userId varchar(100),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @nowTime datetime&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;&nbsp;&nbsp;&nbsp; 
 AS
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insert into SmsOutSquence 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Content, Terminal, State, UserId, SubmitTime) 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VALUES(@smsContent,@t , 0 , @userId ,@nowTime)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT&nbsp;&nbsp;@@IDENTITY as "smsIdentity"
GO


最后一行是通过系统变量IDENTITY得到新行的标识符。

然后在c＃代码中，这样调用这个存储过程： 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SqlConnection ThisConnection = new SqlConnection(@"Server=(local);Integrated Security=True;" + "DataBase=SmsServerDatabase");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ThisConnection.Open();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SqlCommand ThisCommand = ThisConnection.CreateCommand();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ThisCommand.CommandText = "CMPP30_SubmitNewSms";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ThisCommand.CommandType = System.Data.CommandType.StoredProcedure;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ThisCommand.Parameters.Add(new SqlParameter("@smsContent",System.Data.SqlDbType.VarChar));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ThisCommand.Parameters.Add(new SqlParameter("@t",System.Data.SqlDbType.VarChar));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ThisCommand.Parameters.Add(new SqlParameter("@userId",System.Data.SqlDbType.VarChar));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ThisCommand.Parameters.Add(new SqlParameter("@nowTime",System.Data.SqlDbType.DateTime));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ThisCommand.Parameters["@smsContent"].Value=smsContent;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ThisCommand.Parameters["@t"].Value= t;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ThisCommand.Parameters["@userId"].Value=userId;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ThisCommand.Parameters["@nowTime"].Value=nowTime;

&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;SqlDataReader ThisReader = ThisCommand.ExecuteReader();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (ThisReader.Read())
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index = Convert.ToInt64(ThisReader["SmsIdentity"].ToString().Trim());
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(index);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ThisReader.Close();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ThisConnection.Close();

要传递的参数要先定义，并传值给它。最后用executeReader可以返回操作的结果。因为存储过程将结果表现为一个新列smsIdentity，所以可以用thisRead["smsIdentity"]得到返回的结果。
</textarea><br/>Tags - <a href="http://www.tommyhu.cn/tags/%25E5%25AD%2598%25E5%2582%25A8%25E8%25BF%2587%25E7%25A8%258B/" rel="tag">存储过程</a> , <a href="http://www.tommyhu.cn/tags/%25E4%25BB%2580%25E4%25B9%2588%25E6%2598%25AF%25E5%25AD%2598%25E5%2582%25A8%25E8%25BF%2587%25E7%25A8%258B/" rel="tag">什么是存储过程</a> , <a href="http://www.tommyhu.cn/tags/%25E5%25AD%2598%25E5%2582%25A8%25E8%25BF%2587%25E7%25A8%258B%25E4%25BD%25BF%25E7%2594%25A8%25E6%2596%25B9%25E6%25B3%2595/" rel="tag">存储过程使用方法</a> , <a href="http://www.tommyhu.cn/tags/asp%25E4%25BD%25BF%25E7%2594%25A8%25E5%25AD%2598%25E5%2582%25A8%25E8%25BF%2587%25E7%25A8%258B%25E5%25AE%259E%25E4%25BE%258B%25E4%25BB%25A3%25E7%25A0%2581/" rel="tag">asp使用存储过程实例代码</a> , <a href="http://www.tommyhu.cn/tags/c%2523%25E6%2595%25B0%25E6%258D%25AE%25E5%25BA%2593%25E5%25AD%2598%25E5%2582%25A8%25E8%25BF%2587%25E7%25A8%258B%25E4%25BD%25BF%25E7%2594%25A8%25E4%25BB%25A3%25E7%25A0%2581/" rel="tag">c#数据库存储过程使用代码</a>
]]>
</description>
</item><item>
<link>http://www.tommyhu.cn/yellow-coldplay/</link>
<title><![CDATA[来点黄的，有性趣进……]]></title> 
<author>tommyhu &lt;258546962@qq.com&gt;</author>
<category><![CDATA[Emotional story(情感故事)]]></category>
<pubDate>Wed, 28 Jul 2010 13:15:32 +0000</pubDate> 
<guid>http://www.tommyhu.cn/yellow-coldplay/</guid> 
<description>
<![CDATA[ 
	标签：yellow<br/><strong><span style="color: #0000FF;"><span style="font-size: 18px;">对于标题，我只能说abc打字害了我，，当然如果您当真是为了养眼的话，下面这几个帖子估计很适合你！</span></span></strong><br/><span style="color: #FF1493;"><span style="font-size: 14px;">苏州养眼时间相关帖子收集</span></span><br/>这部分内容，请到网站上来浏览。<br/><hr/><br/>来自coldplay 很棒的男声《yellow》，喜欢喜欢……<br/><img src="plugin/audioplayer/mini.gif" style="margin:0px 2px -3px 0px" border="0"/>MP3在线播放<br />        <div id="audioplayer_17863"></div>
		<script type="text/javascript">
           AudioPlayer.setup("plugin/audioplayer/player.swf", {
                width: "290",
				initialvolume: "100",
				transparentpagebg: "yes",
				animation: "yes",
				remaining: "no",
				noinfo: "no",
				buffer: "5",
				encode: "no",
				bg: "0xEAF4F5",
				leftbg: "0x49BEFB",
				lefticon: "0xFFFFFF",
				voltrack: "0xF2F2F2",
				volslider: "0x666666",
				rightbg: "0xFF8500",
				rightbghover: "0xA5D200",
				righticon: "0xFFFFFF",
				righticonhover: "0x2E8B57",
				loader: "0xCCEE00",
				track: "0xFFFFFF",
				tracker: "0xDDDDDD",
				border: "0x666666",
				skip: "0x666666",
				text: "0x333333"
           });
		   AudioPlayer.embed("audioplayer_17863", {
			   soundFile: "http://www.lh-gd.com/bj.mp3",
			   titles: "在线音乐播放",
			   autostart: "yes",
			   loop: "yes"
		   }); 
        </script><br/>Look at the stars,<br/>Look how they shine for you,<br/><br/>And all the thhing you do,<br/><br/>Yeah, they were all Yellow.<br/>I came along,<br/>I wrote a song for you,<br/><br/>And everything you do,<br/><br/>And it was called Yellow.<br/><br/>So then I took my turn,<br/><br/>Oh what a thing to have done,<br/><br/>And it was all Yellow.<br/><br/>Your skin<br/>Oh yeah, your skin and bones,<br/>Turn into something beautiful,<br/>You know, you know I love you so,<br/><br/>You know I love you so.<br/><a href="http://www.tommyhu.cn/attachment.php?fid=2070" class="highslide" onclick="return hs.expand(this)"><img src="http://www.tommyhu.cn/attachment.php?fid=2070" class="insertimage" alt="Highslide JS" title="点击图片放大" border="0" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>I swam across,<br/>I jumped across for you,<br/><br/>Oh what a thing to do.<br/><br/>Cos you were all Yellow,<br/>I drew a line,<br/>I drew a line for you,<br/><br/>Oh what a thing to do,<br/><br/>And it was all Yellow.<br/><br/>Your skin,<br/>Oh yeah your skin and bones,<br/>Turn into something beautiful,<br/>And you know,<br/>For you I＇d bleed myself dry,<br/><br/>For you I＇d bleed myself dry.<br/><br/>It＇s true,<br/>Look how they shine for you,<br/>Look how they shine for you,<br/>Look how they shine for,<br/><br/>Look how they shine for you,<br/>Look how they shine for you,<br/>Look how they shine.<br/>Look at the stars,<br/>Look how they shine for you,<br/><br/>And all the things that you do.<br/><br/>Tags - <a href="http://www.tommyhu.cn/tags/%25E6%259D%25A5%25E7%2582%25B9%25E9%25BB%2584%25E7%259A%2584%25EF%25BC%258C%25E6%259C%2589%25E6%2580%25A7%25E8%25B6%25A3%25E8%25BF%259B%25E2%2580%25A6%25E2%2580%25A6/" rel="tag">来点黄的，有性趣进……</a> , <a href="http://www.tommyhu.cn/tags/yellow-coldplay/" rel="tag">yellow-coldplay</a>
]]>
</description>
</item><item>
<link>http://www.tommyhu.cn/long-juan-feng-radio/</link>
<title><![CDATA[龙卷风网络收音机，收音机中的战斗机！]]></title> 
<author>tommyhu &lt;258546962@qq.com&gt;</author>
<category><![CDATA[IT sources(网络资源)]]></category>
<pubDate>Wed, 28 Jul 2010 12:05:05 +0000</pubDate> 
<guid>http://www.tommyhu.cn/long-juan-feng-radio/</guid> 
<description>
<![CDATA[ 
	龙卷风网络收音机，收音机中的战斗机！挺不错的玩意，很感谢作者“匠品设计工作室 ”，很不错的功能，例如自动报时，自动关机,作为一个多年来有收听收音机习惯的忠实收音机粉丝，觉得龙卷风很靠谱，很实用，哥很喜欢，推荐大家也试试！<br/><a href="http://www.tommyhu.cn/attachment.php?fid=2069" class="highslide" onclick="return hs.expand(this)"><img src="http://www.tommyhu.cn/attachment.php?fid=2069" class="insertimage" alt="Highslide JS" title="点击图片放大" border="0" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>龙卷风网络收音机简介<br/>收录全世界3千多个电台，可以听财经、娱乐、社会新闻，听外语电台，听流行曲，享受摇滚、爵士、民乐、交响乐等。<br/><br/>还可以播放本地媒体文件，支持在线更新、内置录音、皮肤切换、多国语言、热键操作、断线自动重连、定时录音、定时播放、定时关机、语音报时等功能。 <br/>官方下载地址：<a href="http://www.cradio.cn/download.htm" target="_blank">http://www.cradio.cn/download.htm</a>（<span style="color: #008000;">多种版本，安装版，免安装版，多种皮肤下载</span>）<br/><br/>Tags - <a href="http://www.tommyhu.cn/tags/%25E9%25BE%2599%25E5%258D%25B7%25E9%25A3%258E%25E7%25BD%2591%25E7%25BB%259C%25E6%2594%25B6%25E9%259F%25B3%25E6%259C%25BA/" rel="tag">龙卷风网络收音机</a> , <a href="http://www.tommyhu.cn/tags/%25E9%25BE%2599%25E5%258D%25B7%25E9%25A3%258E%25E7%25BD%2591%25E7%25BB%259C%25E6%2594%25B6%25E9%259F%25B3%25E6%259C%25BA%25EF%25BC%258C%25E6%2594%25B6%25E9%259F%25B3%25E6%259C%25BA%25E4%25B8%25AD%25E7%259A%2584%25E6%2588%2598%25E6%2596%2597%25E6%259C%25BA%25EF%25BC%2581/" rel="tag">龙卷风网络收音机，收音机中的战斗机！</a> , <a href="http://www.tommyhu.cn/tags/%25E9%25BE%2599%25E5%258D%25B7%25E9%25A3%258E%25E7%25BD%2591%25E7%25BB%259C%25E6%2594%25B6%25E9%259F%25B3%25E6%259C%25BA%25E4%25B8%258B%25E8%25BD%25BD/" rel="tag">龙卷风网络收音机下载</a> , <a href="http://www.tommyhu.cn/tags/%25E7%25BD%2591%25E7%25BB%259C%25E6%2594%25B6%25E9%259F%25B3%25E6%259C%25BA/" rel="tag">网络收音机</a> , <a href="http://www.tommyhu.cn/tags/%25E5%258C%25A0%25E5%2593%2581%25E8%25AE%25BE%25E8%25AE%25A1%25E5%25B7%25A5%25E4%25BD%259C%25E5%25AE%25A4/" rel="tag">匠品设计工作室</a>
]]>
</description>
</item><item>
<link>http://www.tommyhu.cn/danding/</link>
<title><![CDATA[崩溃！这才是真正的“淡定”啊]]></title> 
<author>tommyhu &lt;258546962@qq.com&gt;</author>
<category><![CDATA[Happy smile(开心一笑)]]></category>
<pubDate>Tue, 27 Jul 2010 13:46:47 +0000</pubDate> 
<guid>http://www.tommyhu.cn/danding/</guid> 
<description>
<![CDATA[ 
	<span style="font-size: 18px;"><span style="color: #FF0000;">崩溃！这才是真正的“淡定”啊<br/>这些照片里面的人真是让人佩服的五体投地啊，看了他们后我才真正的明白什么才叫做“淡定”</span></span><br/><a href="http://www.tommyhu.cn/attachment.php?fid=2066" class="highslide" onclick="return hs.expand(this)"><img src="http://www.tommyhu.cn/attachment.php?fid=2066" class="insertimage" alt="Highslide JS" title="点击图片放大" border="0" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://www.tommyhu.cn/attachment.php?fid=2064" class="highslide" onclick="return hs.expand(this)"><img src="http://www.tommyhu.cn/attachment.php?fid=2064" class="insertimage" alt="Highslide JS" title="点击图片放大" border="0" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://www.tommyhu.cn/attachment.php?fid=2065" class="highslide" onclick="return hs.expand(this)"><img src="http://www.tommyhu.cn/attachment.php?fid=2065" class="insertimage" alt="Highslide JS" title="点击图片放大" border="0" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://www.tommyhu.cn/attachment.php?fid=2067" class="highslide" onclick="return hs.expand(this)"><img src="http://www.tommyhu.cn/attachment.php?fid=2067" class="insertimage" alt="Highslide JS" title="点击图片放大" border="0" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://www.tommyhu.cn/attachment.php?fid=2068" class="highslide" onclick="return hs.expand(this)"><img src="http://www.tommyhu.cn/attachment.php?fid=2068" class="insertimage" alt="Highslide JS" title="点击图片放大" border="0" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>Tags - <a href="http://www.tommyhu.cn/tags/%25E5%25B4%25A9%25E6%25BA%2583%25EF%25BC%2581%25E8%25BF%2599%25E6%2589%258D%25E6%2598%25AF%25E7%259C%259F%25E6%25AD%25A3%25E7%259A%2584%25E2%2580%259C%25E6%25B7%25A1%25E5%25AE%259A%25E2%2580%259D%25E5%2595%258A/" rel="tag">崩溃！这才是真正的“淡定”啊</a> , <a href="http://www.tommyhu.cn/tags/%25E5%2595%25A5%25E5%258F%25AB%25E6%25B7%25A1%25E5%25AE%259A/" rel="tag">啥叫淡定</a> , <a href="http://www.tommyhu.cn/tags/%25E8%259B%258B%25E5%25AE%259A/" rel="tag">蛋定</a> , <a href="http://www.tommyhu.cn/tags/%25E6%25B7%25A1%25E5%25AE%259A/" rel="tag">淡定</a> , <a href="http://www.tommyhu.cn/tags/%25E7%259C%259F%25E6%25AD%25A3%25E7%259A%2584%25E6%25B7%25A1%25E5%25AE%259A/" rel="tag">真正的淡定</a> , <a href="http://www.tommyhu.cn/tags/%25E6%25B7%25A1%25E5%25AE%259A%25E6%259C%2580%25E9%25AB%2598%25E5%25A2%2583%25E7%2595%258C/" rel="tag">淡定最高境界</a>
]]>
</description>
</item><item>
<link>http://www.tommyhu.cn/If-we-can-together/</link>
<title><![CDATA[如果我们能在一起]]></title> 
<author>tommyhu &lt;258546962@qq.com&gt;</author>
<category><![CDATA[Emotional story(情感故事)]]></category>
<pubDate>Tue, 27 Jul 2010 11:22:35 +0000</pubDate> 
<guid>http://www.tommyhu.cn/If-we-can-together/</guid> 
<description>
<![CDATA[ 
	如果当我29岁时， <br/><span class="underline4">我们能在一起</span>， <br/>我们一起用心经营我们的家， <br/>每天听着宝宝稚嫩的声音叫我们“爸爸”、“妈妈”<br/><a href="http://www.tommyhu.cn/attachment.php?fid=2055" class="highslide" onclick="return hs.expand(this)"><img src="http://www.tommyhu.cn/attachment.php?fid=2055" class="insertimage" alt="Highslide JS" title="点击图片放大" border="0" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>............<br/><br/>Tags - <a href="http://www.tommyhu.cn/tags/%25E5%25A6%2582%25E6%259E%259C%25E6%2588%2591%25E4%25BB%25AC%25E8%2583%25BD%25E5%259C%25A8%25E4%25B8%2580%25E8%25B5%25B7/" rel="tag">如果我们能在一起</a> , <a href="http://www.tommyhu.cn/tags/%25E7%2588%25B1%25E6%2583%2585%25E6%2595%2585%25E4%25BA%258B/" rel="tag">爱情故事</a> , <a href="http://www.tommyhu.cn/tags/%25E6%25B0%25B8%25E8%25BF%259C%25E5%259C%25A8%25E4%25B8%2580%25E8%25B5%25B7/" rel="tag">永远在一起</a> , <a href="http://www.tommyhu.cn/tags/%25E4%25BB%2580%25E4%25B9%2588%25E6%2598%25AF%25E7%2588%25B1%25E6%2583%2585/" rel="tag">什么是爱情</a> , <a href="http://www.tommyhu.cn/tags/%25E7%2588%25B1%25E6%2583%2585%25E7%25BB%258F%25E5%2585%25B8%25E8%25AF%25A0%25E9%2587%258A/" rel="tag">爱情经典诠释</a>
]]>
</description>
</item><item>
<link>http://www.tommyhu.cn/di-nuo-man/</link>
<title><![CDATA[黄颖的“迪诺曼”——上海世博会上的苏州身影 ]]></title> 
<author>tommyhu &lt;258546962@qq.com&gt;</author>
<category><![CDATA[IT sources(网络资源)]]></category>
<pubDate>Tue, 27 Jul 2010 09:21:50 +0000</pubDate> 
<guid>http://www.tommyhu.cn/di-nuo-man/</guid> 
<description>
<![CDATA[ 
	<a href="http://www.tommyhu.cn/attachment.php?fid=2051" class="highslide" onclick="return hs.expand(this)"><img src="http://www.tommyhu.cn/attachment.php?fid=2051" class="insertimage" alt="Highslide JS" title="点击图片放大" border="0" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>第41届世博会已经在上海顺利开幕了，做为离上海最近的地级市，苏州也俨然成了上海世博的半个东道主，除去吸引了大量的游客到苏州游览外，苏州的一些企业也积极地参与到上海世博会的建设和举办过程中了，这其中就有一家民营的苏州企业——迪诺曼（苏州）科技服务有限公司，除了做为苏州地区唯一一家为世博会供餐的服务商，每天计划为前来参观的群众提供最低5000份的中式商务套餐之外，迪诺曼还提供很多国家馆的保洁和保安的服务。<br/><br/>我为什么关注迪诺曼，这其实是包含了个人的一点私心，那就是这家企业的董事长——黄颖，是我的表妹，在向别人充满自豪地介绍这个能干的年轻企业家是我表妹的同时，也感到了一丝汗颜，看着这个只比我小一岁，当初曾经跟着我屁股后面跑的小丫头短短的十来年就能有这么大的成就，我这个当哥哥的多少都有些惭愧。<br/><br/>翻开黄颖的职业生涯，其实她并不避讳自己的学历不高，中专毕业后选择了一家星级饭店担任实习销售经理，十个月后也就是1997年开始闯荡上海，很幸运地被世界500强的瑞典伊莱克斯公司上海分公司录取。开始只是做秘书的工作，但很快发挥特长，一个月后就被提升为客服主管，三个月后又升为江苏区域销售经理。那段时间由于经常往返于苏州、上海，看到苏州新加坡工业园区正在大力开发建设，黄颖觉得家乡充满了商机，于是，她果断决定自己创业。1998年4月，黄颖回到苏州创立了第一个企业，代理销售伊莱克斯商用设备。当时黄颖付完三个月房租和购买一些简单办公设备后，仅凭剩下的2000元人民币就开始了艰苦的创业之路。为了尽快让企业接到订单，她严格要求自己每天至少拜访6个客户。初创的苏州工业园区，交通并不像现在这么便捷，很多外资工厂公交车无法到达，为了节约仅有的创业资金，黄颖每天陆续要走两小时的路，经常因为太疲惫在回家的公交车上睡着坐过了车站。通过马不停蹄的拜访，两个月后终于和一家美资公司签署了一份3万美元的销售合约，终于赚到了人生的第一桶金。从销售到送货和收款，黄颖一个人忙碌地扮演着不同的角色，常常累倒生病，医院出来后又直接去见客户。那时，每当月末经常有个女孩的身影在一些外资工厂的大堂静静地坐着，为了等支票，等着拿到公司周转所急需的资金。<br/><br/>其实我对黄颖的职业生涯的了解更多的是在她回苏创业之后，可以说是看着她如何勤奋努力，脚踏实地一点点地从一家居住在民房里的贸易公司发展到如今在苏州地价最贵的工业园区拥有占地面积1万平米，提供环境服务、物业管理、无尘室工作服清洗、企业餐饮管理等多元化的一站式企业后勤管家的集团公司，迄今为止已为在华投资的众多知名企业提供此项长期服务,服务面积已达到200万平米以上。2007年底更成为国内首个获得海外风险投资的后勤外包公司。而那些曾经对迪诺曼俯视的国际性后勤服务集团，也在黄颖的步步紧逼中收缩了了阵线。2001年11月，黄颖得到了为诺基亚苏州公司提供企业环境清洁服务的项目。当时，诺基亚苏州公司由一家世界500强的法国服务公司提供服务，由于她的成功中标，使得那家法国公司失去了苏州地区的样板项目，法国公司的地区负责人就千方百计打击黄颖的公司，控告她没有相关的营业执照，黄颖被迫重新注册公司，为新公司取名“迪诺曼”，英文是“Diploma”,含义是证书、文凭，引申含义为行业权威。因为她希望有一天“迪诺曼”也可以跻身世界舞台，和世界级的服务公司同台搏弈，再也不要被他们以强欺弱。<br/><br/>遥想她创业之初，租住的民房白天是办公室，晚上就是卧室，她整整睡了两年的地板，所以当年我曾打趣她道：“你不太像我们苏州的女孩子，倒更像浙江的民营企业家，所谓睡得了地板，当得起老板”，回首来看，也正是这段经历磨练了她的意志。在后来的发展过程中，她和她的迪诺曼也曾不止一次的碰到了风险和机遇，但黄颖总能够有效的规避风险并抓住机遇，一步步地做大做强，在不断提升服务产品的技术含量的同时，实现产业升级。黄颖计划将迪诺曼从“一站式企业后勤管家”演变成“全球工作场所整体解决方案专家”，在未来的3年内大举进军中国15个重点城市的后勤外包服务市场，争取3年后达到上亿美元年营业额并且顺利在海外上市，力争5年后成为亚洲最大的后勤外包服务商之一。相比江苏卫视“非诚勿扰”2010年5月2日那期的男嘉宾许盼喊出的想在35岁之前赚一个亿的口号，我更愿意相信我表妹的能力和信心。现在迪诺曼已经拥有员工1300人，为苏州、上海、无锡三地近100个跨国企业或事业机构提供后勤管家服务，其中世界500强的客户拥有近40个。他们不仅获得了客户的认可，也获得了很多来自政府授予的荣誉称号。几乎每年黄颖都会接待一些世界500强服务公司的高级代表，他们向她表示了收购迪诺曼的意向，但都被黄颖婉言谢绝了。她的好朋友，现任中国美国商会的会长柏迈高先生也曾激励她，“一定要将迪诺曼变成中国龙，飞向世界。”<br/><br/>为了能够镜像成功人士的性格特质，我们也邀请黄颖参加了DISC行为模式的测试(<a href="http://www.yiiway.com/ydisc/)" target="_blank">http://www.yiiway.com/ydisc/)</a>，她的DISC行为模式是典型的ID模式-劝说者，“您的典型行为风格，可被大致描述为是“劝说者”的类型。这种类型的人通常喜欢社交，对人特别感兴趣，能获得不同类型人的尊重与钦佩。他们以一种友好的方式工作，但却会为了目标而努力超过他人并突出自己的观点。劝说者既要权威也要威望，他们喜欢有变化性的富有挑战的工作，但是也可能因为忙碌而紧张。他们也经常被认为是自负的。”<br/><br/>有趣的是，黄颖对于DISC的评价相当的认同，一苇网的合伙人吴骥扬回忆起黄颖的时候，就有段经典的描述，“我在大学期间就接触过黄颖，那个时候的她还是个黄毛丫头，可能由于对大学生活的向往，她经常会跑到我们学校来玩，记得最初认识她是在一次班级组织的外出游玩，热情活泼的她很快就跟我们熟识起来，当时很惊奇的发现，我们一起去的每个同学只要自我介绍了一遍，她就牢牢记住了对方的名字，哪怕是那些相对来说比较性格内向，默默无闻的同学，相比来说，如果我刚到一个陌生的环境，肯定是更容易记住那些性格活跃、外向幽默的人，而那些不显山不露水的人则不会引起太多的关注，甚至事后都记不得名字。黄颖的这个特点给我留下了深刻的印象，现在想来她应该就是属于DISC中典型的ID的人。。。。。。”<br/><br/>“迪诺曼就是我的孩子，我要引领她不断提升服务产品的技术含量，实现产业升级，从“一站式企业后勤管家”演变成“全球工作场所整体解决方案专家”，在未来的3年内大举进军中国15个城市的后勤外包服务市场，争取3年后达到上亿美元年营业额并且顺利在海外上市，力争5年后成为亚洲最大的后勤外包服务商之一。创造一个优秀的华人服务品牌，这个梦想将伴随着我坚定不移地走下去，千辛万苦我也会从容面对。“天才就是一辈子只做一件事！，这就是我的信仰，是我的使命！”<br/><br/>正因为黄颖有一个明确的职业生涯规划，并付诸实践，为之努力，所以她成为了我们家族的骄傲，现在也成了苏州人的骄傲，不久的将来，她更加会成为中国人的骄傲。<br/><br/>Tags - <a href="http://www.tommyhu.cn/tags/%25E9%25BB%2584%25E9%25A2%2596%25E7%259A%2584%25E2%2580%259C%25E8%25BF%25AA%25E8%25AF%25BA%25E6%259B%25BC%25E2%2580%259D%25E2%2580%2594%25E2%2580%2594%25E4%25B8%258A%25E6%25B5%25B7%25E4%25B8%2596%25E5%258D%259A%25E4%25BC%259A%25E4%25B8%258A%25E7%259A%2584%25E8%258B%258F%25E5%25B7%259E%25E8%25BA%25AB%25E5%25BD%25B1/" rel="tag">黄颖的“迪诺曼”——上海世博会上的苏州身影</a> , <a href="http://www.tommyhu.cn/tags/%25E8%258B%258F%25E5%25B7%259E%25E9%25BB%2584%25E9%25A2%2596%25E5%2588%259B%25E4%25B8%259A/" rel="tag">苏州黄颖创业</a> , <a href="http://www.tommyhu.cn/tags/%25E9%25BB%2584%25E9%25A2%2596%25E7%259A%2584%25E2%2580%259C%25E8%25BF%25AA%25E8%25AF%25BA%25E6%259B%25BC%25E2%2580%259C/" rel="tag">黄颖的“迪诺曼“</a> , <a href="http://www.tommyhu.cn/tags/%25E5%2588%259B%25E4%25B8%259A/" rel="tag">创业</a> , <a href="http://www.tommyhu.cn/tags/%25E9%259D%2592%25E5%25B9%25B4%25E5%2588%259B%25E4%25B8%259A%25E6%2595%2585%25E4%25BA%258B/" rel="tag">青年创业故事</a> , <a href="http://www.tommyhu.cn/tags/%25E8%258B%258F%25E5%25B7%259E%25E7%2594%259F%25E6%25B4%25BB/" rel="tag">苏州生活</a>
]]>
</description>
</item><item>
<link>http://www.tommyhu.cn/bianma/</link>
<title><![CDATA[字符，字节和编码（转）]]></title> 
<author>tommyhu &lt;258546962@qq.com&gt;</author>
<category><![CDATA[IT sources(网络资源)]]></category>
<pubDate>Tue, 27 Jul 2010 09:06:52 +0000</pubDate> 
<guid>http://www.tommyhu.cn/bianma/</guid> 
<description>
<![CDATA[ 
	转：http://www.regexlab.com/zh/encoding.htm]<br/><br/>摘要：本文介绍了字符与编码的发展过程，相关概念的正确理解。举例说明了一些实际应用中，编码的实现方法。然后，本文讲述了通常对字符与编码的几种误解，由于这些误解而导致乱码产生的原因，以及消除乱码的办法。本文的内容涵盖了“中文问题”，“乱码问题”。<br/><br/>掌握编码问题的关键是正确地理解相关概念，编码所涉及的技术其实是很简单的。因此，阅读本文时需要慢读多想，多思考。<br/><br/>引言<br/>“字符与编码”是一个被经常讨论的话题。即使这样，时常出现的乱码仍然困扰着大家。虽然我们有很多的办法可以用来消除乱码，但我们并不一定理解这些办法的内在原理。而有的乱码产生的原因，实际上由于底层代码本身有问题所导致的。因此，不仅是初学者会对字符编码感到模糊，有的底层开发人员同样对字符编码缺乏准确的理解。<br/><br/> <br/> 回页首<br/> <br/> <br/> <br/><br/>1. 编码问题的由来，相关概念的理解<br/>1.1 字符与编码的发展<br/>从计算机对多国语言的支持角度看，大致可以分为三个阶段：<br/><br/>　 系统内码 说明 系统 <br/>阶段一 ASCII 计算机刚开始只支持英语，其它语言不能够在计算机上存储和显示。 英文 DOS <br/>阶段二 ANSI编码<br/>（本地化） 为使计算机支持更多语言，通常使用 0x80~0xFF 范围的 2 个字节来表示 1 个字符。比如：汉字 &#039;中&#039; 在中文操作系统中，使用 [0xD6,0xD0] 这两个字节存储。<br/><br/>不同的国家和地区制定了不同的标准，由此产生了 GB2312, BIG5, JIS 等各自的编码标准。这些使用 2 个字节来代表一个字符的各种汉字延伸编码方式，称为 ANSI 编码。在简体中文系统下，ANSI 编码代表 GB2312 编码，在日文操作系统下，ANSI 编码代表 JIS 编码。<br/><br/>不同 ANSI 编码之间互不兼容，当信息在国际间交流时，无法将属于两种语言的文字，存储在同一段 ANSI 编码的文本中。 中文 DOS，中文 Windows 95/98，日文 Windows 95/98 <br/>阶段三 UNICODE<br/>（国际化） 为了使国际间信息交流更加方便，国际组织制定了 UNICODE 字符集，为各种语言中的每一个字符设定了统一并且唯一的数字编号，以满足跨语言、跨平台进行文本转换、处理的要求。 Windows NT/2000/XP，Linux，Java <br/><br/>字符串在内存中的存放方法：<br/><br/>在 ASCII 阶段，单字节字符串使用一个字节存放一个字符（SBCS）。比如，&quot;Bob123&quot; 在内存中为：<br/><br/>42 6F 62 31 32 33 00 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>B o b 1 2 3 &#92;0 <br/><br/>在使用 ANSI 编码支持多种语言阶段，每个字符使用一个字节或多个字节来表示（MBCS），因此，这种方式存放的字符也被称作多字节字符。比如，&quot;中文123&quot; 在中文 Windows 95 内存中为7个字节，每个汉字占2个字节，每个英文和数字字符占1个字节：<br/><br/>D6 D0 CE C4 31 32 33 00 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>中 文 1 2 3 &#92;0 <br/><br/>在 UNICODE 被采用之后，计算机存放字符串时，改为存放每个字符在 UNICODE 字符集中的序号。目前计算机一般使用 2 个字节（16 位）来存放一个序号（DBCS），因此，这种方式存放的字符也被称作宽字节字符。比如，字符串 &quot;中文123&quot; 在 Windows 2000 下，内存中实际存放的是 5 个序号：<br/><br/>2D 4E 87 65 31 00 32 00 33 00 00 00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;← 在 x86 CPU 中，低字节在前 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>中 文 1 2 3 &#92;0 　 <br/><br/>一共占 10 个字节。<br/><br/> <br/> 回页首<br/> <br/> <br/> <br/><br/>1.2 字符，字节，字符串<br/>理解编码的关键，是要把字符的概念和字节的概念理解准确。这两个概念容易混淆，我们在此做一下区分：<br/><br/>　 概念描述 举例 <br/>字符 人们使用的记号，抽象意义上的一个符号。 &#039;1&#039;, &#039;中&#039;, &#039;a&#039;, &#039;$&#039;, &#039;￥&#039;, …… <br/>字节 计算机中存储数据的单元，一个8位的二进制数，是一个很具体的存储空间。 0x01, 0x45, 0xFA, …… <br/>ANSI<br/>字符串 在内存中，如果“字符”是以 ANSI 编码形式存在的，一个字符可能使用一个字节或多个字节来表示，那么我们称这种字符串为 ANSI 字符串或者多字节字符串。 &quot;中文123&quot;<br/>（占7字节） <br/>UNICODE<br/>字符串 在内存中，如果“字符”是以在 UNICODE 中的序号存在的，那么我们称这种字符串为 UNICODE 字符串或者宽字节字符串。 L&quot;中文123&quot;<br/>（占10字节） <br/><br/>由于不同 ANSI 编码所规定的标准是不相同的，因此，对于一个给定的多字节字符串，我们必须知道它采用的是哪一种编码规则，才能够知道它包含了哪些“字符”。而对于 UNICODE 字符串来说，不管在什么环境下，它所代表的“字符”内容总是不变的。<br/><br/> <br/> 回页首<br/> <br/> <br/> <br/><br/>1.3 字符集与编码<br/>&nbsp;&nbsp; <br/>&nbsp;&nbsp; <br/> <br/>&nbsp;&nbsp;<br/> <br/>&nbsp;&nbsp; <br/>各个国家和地区所制定的不同 ANSI 编码标准中，都只规定了各自语言所需的“字符”。比如：汉字标准（GB2312）中没有规定韩国语字符怎样存储。这些 ANSI 编码标准所规定的内容包含两层含义：<br/><br/>使用哪些字符。也就是说哪些汉字，字母和符号会被收入标准中。所包含“字符”的集合就叫做“字符集”。<br/>规定每个“字符”分别用一个字节还是多个字节存储，用哪些字节来存储，这个规定就叫做“编码”。 <br/>各个国家和地区在制定编码标准的时候，“字符的集合”和“编码”一般都是同时制定的。因此，平常我们所说的“字符集”，比如：GB2312, GBK, JIS 等，除了有“字符的集合”这层含义外，同时也包含了“编码”的含义。<br/><br/>“UNICODE 字符集”包含了各种语言中使用到的所有“字符”。用来给 UNICODE 字符集编码的标准有很多种，比如：UTF-8, UTF-7, UTF-16, UnicodeLittle, UnicodeBig 等。<br/><br/> <br/> 回页首<br/> <br/> <br/> <br/><br/>1.4 常用的编码简介<br/>简单介绍一下常用的编码规则，为后边的章节做一个准备。在这里，我们根据编码规则的特点，把所有的编码分成三类：<br/><br/>分类 编码标准 说明 <br/>单字节字符编码 ISO-8859-1 最简单的编码规则，每一个字节直接作为一个 UNICODE 字符。比如，[0xD6, 0xD0] 这两个字节，通过 iso-8859-1 转化为字符串时，将直接得到 [0x00D6, 0x00D0] 两个 UNICODE 字符，即 &quot;ÖÐ&quot;。<br/><br/>反之，将 UNICODE 字符串通过 iso-8859-1 转化为字节串时，只能正常转化 0~255 范围的字符。 <br/>ANSI 编码 GB2312,<br/>BIG5,<br/>Shift_JIS,<br/>ISO-8859-2 …… 把 UNICODE 字符串通过 ANSI 编码转化为“字节串”时，根据各自编码的规定，一个 UNICODE 字符可能转化成一个字节或多个字节。<br/><br/>反之，将字节串转化成字符串时，也可能多个字节转化成一个字符。比如，[0xD6, 0xD0] 这两个字节，通过 GB2312 转化为字符串时，将得到 [0x4E2D] 一个字符，即 &#039;中&#039; 字。<br/><br/>“ANSI 编码”的特点：<br/>1. 这些“ANSI 编码标准”都只能处理各自语言范围之内的 UNICODE 字符。<br/>2. “UNICODE 字符”与“转换出来的字节”之间的关系是人为规定的。 <br/>UNICODE 编码 UTF-8,<br/>UTF-16, UnicodeBig …… 与“ANSI 编码”类似的，把字符串通过 UNICODE 编码转化成“字节串”时，一个 UNICODE 字符可能转化成一个字节或多个字节。<br/><br/>与“ANSI 编码”不同的是：<br/>1. 这些“UNICODE 编码”能够处理所有的 UNICODE 字符。<br/>2. “UNICODE 字符”与“转换出来的字节”之间是可以通过计算得到的。 <br/><br/>我们实际上没有必要去深究每一种编码具体把某一个字符编码成了哪几个字节，我们只需要知道“编码”的概念就是把“字符”转化成“字节”就可以了。对于“UNICODE 编码”，由于它们是可以通过计算得到的，因此，在特殊的场合，我们可以去了解某一种“UNICODE 编码”是怎样的规则。<br/><br/> <br/> 回页首<br/> <br/> <br/> <br/><br/>2. 字符与编码在程序中的实现<br/>2.1 程序中的字符与字节<br/>在 C++ 和 Java 中，用来代表“字符”和“字节”的数据类型，以及进行编码的方法：<br/><br/>类型或操作 C++ Java <br/>字符 wchar_t char <br/>字节 char byte <br/>ANSI 字符串 char[] byte[] <br/>UNICODE 字符串 wchar_t[] String <br/>字节串→字符串 mbstowcs(), MultiByteToWideChar() string = new String(bytes, &quot;encoding&quot;) <br/>字符串→字节串 wcstombs(), WideCharToMultiByte() bytes = string.getBytes(&quot;encoding&quot;) <br/><br/>以上需要注意几点：<br/><br/>Java 中的 char 代表一个“UNICODE 字符（宽字节字符）”，而 C++ 中的 char 代表一个字节。<br/>MultiByteToWideChar() 和 WideCharToMultiByte() 是 Windows API 函数。 <br/> <br/> 回页首<br/> <br/> <br/> <br/><br/>2.2 C++ 中相关实现方法<br/>声明一段字符串常量：<br/><br/>// ANSI 字符串，内容长度 7 字节<br/>char&nbsp;&nbsp;&nbsp;&nbsp; sz[20] = &quot;中文123&quot;;<br/><br/>// UNICODE 字符串，内容长度 5 个 wchar_t（10 字节）<br/>wchar_t wsz[20] = L&quot;&#92;x4E2D&#92;x6587&#92;x0031&#92;x0032&#92;x0033&quot;; <br/><br/>UNICODE 字符串的 I/O 操作，字符与字节的转换操作：<br/><br/>// 运行时设定当前 ANSI 编码，VC 格式<br/>setlocale(LC_ALL, &quot;.936&quot;);<br/><br/>// GCC 中格式<br/>setlocale(LC_ALL, &quot;zh_CN.GBK&quot;);<br/><br/>// Visual C++ 中使用小写 %s，按照 setlocale 指定编码输出到文件<br/>// GCC 中使用大写 %S<br/>fwprintf(fp, L&quot;%s&#92;n&quot;, wsz);<br/><br/>// 把 UNICODE 字符串按照 setlocale 指定的编码转换成字节<br/>wcstombs(sz, wsz, 20);<br/>// 把字节串按照 setlocale 指定的编码转换成 UNICODE 字符串<br/>mbstowcs(wsz, sz, 20); <br/><br/>在 Visual C++ 中，UNICODE 字符串常量有更简单的表示方法。如果源程序的编码与当前默认 ANSI 编码不符，则需要使用 #pragma setlocale，告诉编译器源程序使用的编码：<br/><br/>// 如果源程序的编码与当前默认 ANSI 编码不一致，<br/>// 则需要此行，编译时用来指明当前源程序使用的编码<br/>#pragma setlocale(&quot;.936&quot;)<br/><br/>// UNICODE 字符串常量，内容长度 10 字节<br/>wchar_t wsz[20] = L&quot;中文123&quot;; <br/><br/>以上需要注意 #pragma setlocale 与 setlocale(LC_ALL, &quot;&quot;) 的作用是不同的，#pragma setlocale 在编译时起作用，setlocale() 在运行时起作用。<br/><br/> <br/> 回页首<br/> <br/> <br/> <br/><br/>2.3 Java 中相关实现方法<br/>字符串类 String 中的内容是 UNICODE 字符串：<br/><br/>// Java 代码，直接写中文<br/>String string = &quot;中文123&quot;;<br/><br/>// 得到长度为 5，因为是 5 个字符<br/>System.out.println(string.length()); <br/><br/>字符串 I/O 操作，字符与字节转换操作。在 Java 包 java.io.* 中，以“Stream”结尾的类一般是用来操作“字节串”的类，以“Reader”，“Writer”结尾的类一般是用来操作“字符串”的类。<br/><br/>// 字符串与字节串间相互转化<br/><br/>// 按照 GB2312 得到字节（得到多字节字符串）<br/>byte [] bytes = string.getBytes(&quot;GB2312&quot;);<br/><br/>// 从字节按照 GB2312 得到 UNICODE 字符串<br/>string = new String(bytes, &quot;GB2312&quot;);<br/><br/>// 要将 String 按照某种编码写入文本文件，有两种方法：<br/><br/>// 第一种办法：用 Stream 类写入已经按照指定编码转化好的字节串<br/>OutputStream os = new FileOutputStream(&quot;1.txt&quot;);<br/>os.write(bytes);<br/>os.close();<br/><br/>// 第二种办法：构造指定编码的 Writer 来写入字符串<br/>Writer ow = new OutputStreamWriter(new FileOutputStream(&quot;2.txt&quot;), &quot;GB2312&quot;);<br/>ow.write(string);<br/>ow.close();<br/><br/>/* 最后得到的 1.txt 和 2.txt 都是 7 个字节 */ <br/><br/>如果 java 的源程序编码与当前默认 ANSI 编码不符，则在编译的时候，需要指明一下源程序的编码。比如：<br/><br/>E:&#92;&gt;javac -encoding BIG5 Hello.java <br/><br/>以上需要注意区分源程序的编码与 I/O 操作的编码，前者是在编译时起作用，后者是在运行时起作用。<br/><br/> <br/> 回页首<br/> <br/> <br/> <br/><br/>3. 几种误解，以及乱码产生的原因和解决办法<br/>3.1 容易产生的误解<br/>　 对编码的误解 <br/>误解一 在将“字节串”转化成“UNICODE 字符串”时，比如在读取文本文件时，或者通过网络传输文本时，容易将“字节串”简单地作为单字节字符串，采用每“一个字节”就是“一个字符”的方法进行转化。<br/><br/>而实际上，在非英文的环境中，应该将“字节串”作为 ANSI 字符串，采用适当的编码来得到 UNICODE 字符串，有可能“多个字节”才能得到“一个字符”。<br/><br/>通常，一直在英文环境下做开发的程序员们，容易有这种误解。 <br/>误解二 在 DOS，Windows 98 等非 UNICODE 环境下，字符串都是以 ANSI 编码的字节形式存在的。这种以字节形式存在的字符串，必须知道是哪种编码才能被正确地使用。这使我们形成了一个惯性思维：“字符串的编码”。<br/><br/>当 UNICODE 被支持后，Java 中的 String 是以字符的“序号”来存储的，不是以“某种编码的字节”来存储的，因此已经不存在“字符串的编码”这个概念了。只有在“字符串”与“字节串”转化时，或者，将一个“字节串”当成一个 ANSI 字符串时，才有编码的概念。<br/><br/>不少的人都有这个误解。 <br/><br/>第一种误解，往往是导致乱码产生的原因。第二种误解，往往导致本来容易纠正的乱码问题变得更复杂。<br/><br/>在这里，我们可以看到，其中所讲的“误解一”，即采用每“一个字节”就是“一个字符”的转化方法，实际上也就等同于采用 iso-8859-1 进行转化。因此，我们常常使用 bytes = string.getBytes(&quot;iso-8859-1&quot;) 来进行逆向操作，得到原始的“字节串”。然后再使用正确的 ANSI 编码，比如 string = new String(bytes, &quot;GB2312&quot;)，来得到正确的“UNICODE 字符串”。<br/><br/> <br/> 回页首<br/> <br/> <br/> <br/><br/>3.2 非 UNICODE 程序在不同语言环境间移植时的乱码<br/>非 UNICODE 程序中的字符串，都是以某种 ANSI 编码形式存在的。如果程序运行时的语言环境与开发时的语言环境不同，将会导致 ANSI 字符串的显示失败。<br/><br/>比如，在日文环境下开发的非 UNICODE 的日文程序界面，拿到中文环境下运行时，界面上将显示乱码。如果这个日文程序界面改为采用 UNICODE 来记录字符串，那么当在中文环境下运行时，界面上将可以显示正常的日文。<br/><br/>由于客观原因，有时候我们必须在中文操作系统下运行非 UNICODE 的日文软件，这时我们可以采用一些工具，比如，南极星，AppLocale 等，暂时的模拟不同的语言环境。<br/><br/> <br/> 回页首<br/> <br/> <br/> <br/><br/>3.3 网页提交字符串<br/>当页面中的表单提交字符串时，首先把字符串按照当前页面的编码，转化成字节串。然后再将每个字节转化成 &quot;%XX&quot; 的格式提交到 Web 服务器。比如，一个编码为 GB2312 的页面，提交 &quot;中&quot; 这个字符串时，提交给服务器的内容为 &quot;%D6%D0&quot;。<br/><br/>在服务器端，Web 服务器把收到的 &quot;%D6%D0&quot; 转化成 [0xD6, 0xD0] 两个字节，然后再根据 GB2312 编码规则得到 &quot;中&quot; 字。<br/><br/>在 Tomcat 服务器中，request.getParameter() 得到乱码时，常常是因为前面提到的“误解一”造成的。默认情况下，当提交 &quot;%D6%D0&quot; 给 Tomcat 服务器时，request.getParameter() 将返回 [0x00D6, 0x00D0] 两个 UNICODE 字符，而不是返回一个 &quot;中&quot; 字符。因此，我们需要使用 bytes = string.getBytes(&quot;iso-8859-1&quot;) 得到原始的字节串，再用 string = new String(bytes, &quot;GB2312&quot;) 重新得到正确的字符串 &quot;中&quot;。<br/><br/> <br/> 回页首<br/> <br/> <br/> <br/><br/>3.4 从数据库读取字符串<br/>通过数据库客户端（比如 ODBC 或 JDBC）从数据库服务器中读取字符串时，客户端需要从服务器获知所使用的 ANSI 编码。当数据库服务器发送字节流给客户端时，客户端负责将字节流按照正确的编码转化成 UNICODE 字符串。<br/><br/>如果从数据库读取字符串时得到乱码，而数据库中存放的数据又是正确的，那么往往还是因为前面提到的“误解一”造成的。解决的办法还是通过 string = new String( string.getBytes(&quot;iso-8859-1&quot;), &quot;GB2312&quot;) 的方法，重新得到原始的字节串，再重新使用正确的编码转化成字符串。<br/><br/> <br/> 回页首<br/> <br/> <br/> <br/><br/>3.5 电子邮件中的字符串<br/>当一段 Text 或者 HTML 通过电子邮件传送时，发送的内容首先通过一种指定的字符编码转化成“字节串”，然后再把“字节串”通过一种指定的传输编码（Content-Transfer-Encoding）进行转化得到另一串“字节串”。比如，打开一封电子邮件源代码，可以看到类似的内容：<br/><br/>Content-Type: text/plain;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;charset=&quot;gb2312&quot;<br/>Content-Transfer-Encoding: base64<br/><br/>sbG+qcrQuqO17cf4yee74bGjz9W7+b3wudzA7dbQ0MQNCg0KvPKzxqO6uqO17cnnsaPW0NDEDQoNCg== <br/><br/>最常用的 Content-Transfer-Encoding 有 Base64 和 Quoted-Printable 两种。在对二进制文件或者中文文本进行转化时，Base64 得到的“字节串”比 Quoted-Printable 更短。在对英文文本进行转化时，Quoted-Printable 得到的“字节串”比 Base64 更短。<br/><br/>邮件的标题，用了一种更简短的格式来标注“字符编码”和“传输编码”。比如，标题内容为 &quot;中&quot;，则在邮件源代码中表示为：<br/><br/>// 正确的标题格式<br/>Subject: =?GB2312?B?1tA=?= <br/><br/>其中，<br/><br/>第一个“=?”与“?”中间的部分指定了字符编码，在这个例子中指定的是 GB2312。<br/>“?”与“?”中间的“B”代表 Base64。如果是“Q”则代表 Quoted-Printable。<br/>最后“?”与“?=”之间的部分，就是经过 GB2312 转化成字节串，再经过 Base64 转化后的标题内容。 <br/>如果“传输编码”改为 Quoted-Printable，同样，如果标题内容为 &quot;中&quot;：<br/><br/>// 正确的标题格式<br/>Subject: =?GB2312?Q?=D6=D0?= <br/><br/>如果阅读邮件时出现乱码，一般是因为“字符编码”或“传输编码”指定有误，或者是没有指定。比如，有的发邮件组件在发送邮件时，标题 &quot;中&quot;：<br/><br/>// 错误的标题格式<br/>Subject: =?ISO-8859-1?Q?=D6=D0?= <br/><br/>这样的表示，实际上是明确指明了标题为 [0x00D6, 0x00D0]，即 &quot;ÖÐ&quot;，而不是 &quot;中&quot;。<br/><br/> <br/> 回页首<br/> <br/> <br/> <br/><br/>4. 几种错误理解的纠正<br/>误解：“ISO-8859-1 是国际编码？”<br/>非也。iso-8859-1 只是单字节字符集中最简单的一种，也就是“字节编号”与“UNICODE 字符编号”一致的那种编码规则。当我们要把一个“字节串”转化成“字符串”，而又不知道它是哪一种 ANSI 编码时，先暂时地把“每一个字节”作为“一个字符”进行转化，不会造成信息丢失。然后再使用 bytes = string.getBytes(&quot;iso-8859-1&quot;) 的方法可恢复到原始的字节串。<br/><br/>误解：“Java 中，怎样知道某个字符串的内码？”<br/>Java 中，字符串类 java.lang.String 处理的是 UNICODE 字符串，不是 ANSI 字符串。我们只需要把字符串作为“抽象的符号的串”来看待。因此不存在字符串的内码的问题。<br/><br/><br/>Tags - <a href="http://www.tommyhu.cn/tags/%25E5%25AD%2597%25E7%25AC%25A6%25EF%25BC%258C%25E5%25AD%2597%25E8%258A%2582%25E5%2592%258C%25E7%25BC%2596%25E7%25A0%2581%25EF%25BC%2588%25E8%25BD%25AC%25EF%25BC%2589/" rel="tag">字符，字节和编码（转）</a> , <a href="http://www.tommyhu.cn/tags/%25E7%25BC%2596%25E7%25A0%2581%25E9%2597%25AE%25E9%25A2%2598%25E8%25AF%25A6%25E8%25A7%25A3/" rel="tag">编码问题详解</a> , <a href="http://www.tommyhu.cn/tags/%25E4%25BF%25A1%25E6%2581%25AF%25E7%25BC%2596%25E7%25A0%2581%25E6%258A%2580%25E6%259C%25AF/" rel="tag">信息编码技术</a>
]]>
</description>
</item>
</channel>
</rss>