﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-_skyfly</title><link>http://www.cnitblog.com/_skyfly/</link><description>我不要在IT中迷失方向</description><language>zh-cn</language><lastBuildDate>Wed, 29 Apr 2026 05:58:18 GMT</lastBuildDate><pubDate>Wed, 29 Apr 2026 05:58:18 GMT</pubDate><ttl>60</ttl><item><title>[C++/property模板类]使用时两个报错的解决办法</title><link>http://www.cnitblog.com/_skyfly/archive/2007/01/25/22307.html</link><dc:creator>龙井2008</dc:creator><author>龙井2008</author><pubDate>Thu, 25 Jan 2007 07:54:00 GMT</pubDate><guid>http://www.cnitblog.com/_skyfly/archive/2007/01/25/22307.html</guid><wfw:comment>http://www.cnitblog.com/_skyfly/comments/22307.html</wfw:comment><comments>http://www.cnitblog.com/_skyfly/archive/2007/01/25/22307.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/_skyfly/comments/commentRss/22307.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/_skyfly/services/trackbacks/22307.html</trackback:ping><description><![CDATA[今天在项目中使用了C++的proper模板类，这个模板类是用来完成其它支持属性的语言关键字“属性”类似作用的。<br /><br />在我的代码库内收藏了Achilleas Margaritis编写的C++ object properties library。很吸引人而且实用的功能。可惜在我的VS2005中使用时发生了以下两个错误，错误经定位后均出现在property.hpp中：<br />1、   出错代码： <br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">typedef _property1</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">C, T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::_property2</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">A, S</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"> base_class;</span></div>         错误提示：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">warning C4346: “cpp::properties::_property1</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">C,T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::_property2</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">A,S</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">”: 依赖名称不是类型，用“typename”为前缀来表示类型；</span></div><br />2、   出错代码： 
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000"> {};</span></div>         错误提示：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">error C2332: “</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">”: 缺少标记名；</span></div><br />*********************************************************<br />问题1很快查到原因：<br />*********************************************************<br /><font color="#0000ff" size="2">作者：Scott Meyers<br />译者：fatalerror99 (iTePub's Nirvana)<br /><br />nested dependent name（嵌套依赖名字）会导致解析困难。例如，假设我们更加愚蠢地<br />以这种方法开始 print2nd：<br /><br />template&lt;typename C&gt;<br />void print2nd(const C&amp; container)<br />{<br />  <font color="#ff0000">C::const_iterator * x;<br /></font>  ...<br />}<br /><br /><font color="#0000ff">这看上去好像是我们将 x 声明为一个指向 C::const_iterator 的 local variable（局<br />部变量）。但是它看上去如此仅仅是因为我们知道 C::const_iterator 是一个 type（<br />类型）。<font color="#ff0000">但是如果 C::const_iterator 不是一个 type（类型）呢？如果 C 有一个 st<br />atic data member（静态数据成员）碰巧就叫做 const_iterator 呢？再如果 x 碰巧是<br />一个 global variable（全局变量）的名字呢？在这种情况下，上面的代码就不是声明<br />一个 local variable（局部变量），而是成为 C::const_iterator 乘以 x</font>！当然，这<br />听起来有些愚蠢，但它是可能的，而编写 C++ 解析器的人必须考虑所有可能的输入，甚<br />至是愚蠢的。<br /></font><br />直到 C 成为已知之前，没有任何办法知道 C::const_iterator 到底是不是一个 type（<br />类型），而当 template（模板）print2nd 被解析的时候，C 还不是已知的。C++ 有一<br />条规则解决这个歧义：如果解析器在一个 template（模板）中遇到一个 nested depen<br />dent name（嵌套依赖名字），它假定那个名字不是一个 type（类型），除非你用其它<br />方式告诉它。缺省情况下，nested dependent name（嵌套依赖名字）不是 types（类型<br />）。（对于这条规则有一个例外，我待会儿告诉你。）<br /></font><br />知道原因就简单了，直接把代码修正为：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">typedef<font color="#ff0000"> typename</font><font color="#ff0000"> </font>_property1</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">C, T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::_property2</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">A, S</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"> base_class;</span></div>问题解决(只能说在Windows平台下VS自带的C++编译器问题解决，其它编译器甚至其它平台上的编译器我可没有去试过)。<br /><br />*********************************************************<br />问题2我没查到原因，因为我直接按控制台项目创建示例代码时没出现这样的错误，而在Win32项目创建项目示例代码时就出现这样的报错。因为我大胆猜测，应当VS2005其自带的C++编译器为了支持C++/CLI，将interface列为关键字的缘故。因此编译器认为class interface是两个关键字的罗列，所以才会报“缺少标记名”。所以我的做法如下：<br />*********************************************************<br /><br />把property.hpp(就是那个实现property模板类的文件)中所有涉及“interface”的地方完全替换为“_interface”，同时为保持风格统一，将property模板类中所有作用相同的类全修改为下划线开头！(_variable/_read_write/_read_only/_write_only)，问题搞定！<br /><br />不知道Achilleas Margaritis看到了我的解决方案是不是哭笑不得，哈哈～～<img src ="http://www.cnitblog.com/_skyfly/aggbug/22307.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/_skyfly/" target="_blank">龙井2008</a> 2007-01-25 15:54 <a href="http://www.cnitblog.com/_skyfly/archive/2007/01/25/22307.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WTL 8.0的程序生成向导调整后方可使用</title><link>http://www.cnitblog.com/_skyfly/archive/2006/11/16/19221.html</link><dc:creator>龙井2008</dc:creator><author>龙井2008</author><pubDate>Thu, 16 Nov 2006 07:03:00 GMT</pubDate><guid>http://www.cnitblog.com/_skyfly/archive/2006/11/16/19221.html</guid><wfw:comment>http://www.cnitblog.com/_skyfly/comments/19221.html</wfw:comment><comments>http://www.cnitblog.com/_skyfly/archive/2006/11/16/19221.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cnitblog.com/_skyfly/comments/commentRss/19221.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/_skyfly/services/trackbacks/19221.html</trackback:ping><description><![CDATA[<p>从我开始安装了VS2005以后，我的WTL8.0的程序生成向导就一直不能使用。最近几次开发程序我一直都是在以前开发代码的基础上进行变动。这段时间计划要开发一个比较大的系统，我终于无法忍受这种拷贝粘贴再改动的状况，彻底研读分析程序生成向导的脚本。<br><br>还好，终于给我找到了问题的症结。原来错误不止一处：<br><br>1、WTL80\AppWiz\Files\HTML\1033的目录下的三个文件都存在同一处问题，导致向导无法执行：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AppType.htm的第443到451行、default.htm的第509到517行、UIFeatures.htm的第516到524行：</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">SCRIPT</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">var</span> <span style="COLOR: #000000">&nbsp;strPath&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;window.external.FindSymbol(</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">PRODUCT_INSTALLATION_DIR</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">);<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;strPath&nbsp;</span> <span style="COLOR: #000000">+=</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">VCWizards/</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;strPath&nbsp;</span> <span style="COLOR: #000000">+=</span> <span style="COLOR: #000000">&nbsp;window.external.GetHostLocale();<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">var</span> <span style="COLOR: #000000">&nbsp;strScriptPath&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;strPath&nbsp;</span> <span style="COLOR: #000000">+</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">/Script.js</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">var</span> <span style="COLOR: #000000">&nbsp;strCommonPath&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;strPath&nbsp;</span> <span style="COLOR: #000000">+</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">/Common.js</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;document.scripts(</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">INCLUDE_SCRIPT</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">).src&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;strScriptPath;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;document.scripts(</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">INCLUDE_COMMON</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">).src&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;strCommonPath;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">SCRIPT</span> <span style="COLOR: #000000">&gt;</span> </div>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 需要修改为：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">SCRIPT</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;document.scripts(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">INCLUDE_SCRIPT</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).src&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;window.external.FindSymbol(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SCRIPT_COMMON_PATH</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/Script.js</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;document.scripts(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">INCLUDE_COMMON</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).src&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;window.external.FindSymbol(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SCRIPT_COMMON_PATH</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/Common.js</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">SCRIPT</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 原因是Script.js与Common.js两个文件的路径指向错误，因此无法读取这两个文件中的所定义的函数。<br><br>2、WTL80\AppWiz\Files\HTML\1033\default.htm的第21到22行的标签未封闭，直接删掉：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;!--</span><span style="COLOR: #000000">&nbsp;This&nbsp;closing&nbsp;tag&nbsp;is&nbsp;here&nbsp;only&nbsp;to&nbsp;avoid&nbsp;security&nbsp;warning&nbsp;</span><span style="COLOR: #000000">--&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">OBJECT</span><span style="COLOR: #000000">&gt;</span></div>
<br>3、WTL80\AppWiz\Files\HTML\1033的目录下的三个文件AppType.htm、default.htm、UIFeatures.htm的排版格式有问题，导致向导页面无法正常显示，直接在VS2005中打开进行编辑，将多余的空行删掉，把窄的表格拉宽。搞定。<br><br>现在就可以正常的使用WTL的程序生成向导了，我比较奇怪的是，难道没有其它的同仁们发现这个问题的么，反正我在google和baidu上都没有查到解决方案。<br><br>我已经将这三个文件打包了，需要用的同仁可以下载覆盖一下：<br><a href="http://www.cnitblog.com/Files/_skyfly/1033.rar">WTL8.0程序生成向导修复文件</a>。 <img src ="http://www.cnitblog.com/_skyfly/aggbug/19221.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/_skyfly/" target="_blank">龙井2008</a> 2006-11-16 15:03 <a href="http://www.cnitblog.com/_skyfly/archive/2006/11/16/19221.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>boost在路上...tokenizer [转贴]</title><link>http://www.cnitblog.com/_skyfly/archive/2006/08/10/15046.html</link><dc:creator>龙井2008</dc:creator><author>龙井2008</author><pubDate>Thu, 10 Aug 2006 01:39:00 GMT</pubDate><guid>http://www.cnitblog.com/_skyfly/archive/2006/08/10/15046.html</guid><wfw:comment>http://www.cnitblog.com/_skyfly/comments/15046.html</wfw:comment><comments>http://www.cnitblog.com/_skyfly/archive/2006/08/10/15046.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/_skyfly/comments/commentRss/15046.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/_skyfly/services/trackbacks/15046.html</trackback:ping><description><![CDATA[
		<div class="posttitle">(原载：<a href="http://www.cppblog.com/zuroc/">http://www.cppblog.com/zuroc/</a>)</div>
		<p>tokenizer - Break of a string or other character sequence into a series of tokens, from John Bandela<br />tokenizer - 分解字串,提取内容.作者: John Bandela</p>
		<p>例一:<br />// simple_example_1.cpp<br />#include&lt;iostream&gt;<br />#include&lt;boost/tokenizer.hpp&gt;<br />#include&lt;string&gt;</p>
		<p>int main(){<br />   using namespace std;<br />   using namespace boost;<br />   string s = "This is,  a test";<br />   tokenizer&lt;&gt; tok(s);<br />   for(tokenizer&lt;&gt;::iterator beg=tok.begin(); beg!=tok.end();++beg){<br />       cout &lt;&lt; *beg &lt;&lt; "\n";<br />   }<br />}</p>
		<p>输出<br />This<br />is<br />a<br />test</p>
		<p>tokenizer默认将单词以空格和标点为边界分开.</p>
		<p>例二:<br />#include&lt;iostream&gt;<br />#include&lt;boost/tokenizer.hpp&gt;<br />#include&lt;string&gt;</p>
		<p>int main(){<br />   using namespace std;<br />   using namespace boost;<br />   string s = "Field 1,\"putting quotes around fields, allows commas\",Field 3";<br />   tokenizer&lt;escaped_list_separator&lt;char&gt; &gt; tok(s);<br />   for(tokenizer&lt;escaped_list_separator&lt;char&gt; &gt;::iterator beg=tok.begin(); beg!=tok.end();++beg){<br />       cout &lt;&lt; *beg &lt;&lt; "\n";<br />   }<br />}<br />输出<br />Field 1<br />putting quotes around fields, allows commas<br />Field 3</p>
		<p>双引号之间可以有标点.</p>
		<p>
				<br />例三:<br />// simple_example_3.cpp<br />#include&lt;iostream&gt;<br />#include&lt;boost/tokenizer.hpp&gt;<br />#include&lt;string&gt;</p>
		<p>int main(){<br />   using namespace std;<br />   using namespace boost;<br />   string s = "12252001";<br />   int offsets[] = {2,2,4};<br />   offset_separator f(offsets, offsets+3);<br />   tokenizer&lt;offset_separator&gt; tok(s,f);<br />   for(tokenizer&lt;offset_separator&gt;::iterator beg=tok.begin(); beg!=tok.end();++beg){<br />       cout &lt;&lt; *beg &lt;&lt; "\n";<br />   }<br />}</p>
		<p>把12252001分解为<br />12<br />25<br />2001</p>
		<p>例4:<br />// char_sep_example_1.cpp<br />#include &lt;iostream&gt;<br />#include &lt;boost/tokenizer.hpp&gt;<br />#include &lt;string&gt;</p>
		<p>int main()<br />{<br />  std::string str = ";!!;Hello|world||-foo--bar;yow;baz|";<br />  typedef boost::tokenizer&lt;boost::char_separator&lt;char&gt; &gt;<br />    tokenizer;<br />  boost::char_separator&lt;char&gt; sep("-;|");<br />  tokenizer tokens(str, sep);<br />  for (tokenizer::iterator tok_iter = tokens.begin();<br />       tok_iter != tokens.end(); ++tok_iter)<br />    std::cout &lt;&lt; "&lt;" &lt;&lt; *tok_iter &lt;&lt; "&gt; ";<br />  std::cout &lt;&lt; "\n";<br />  return EXIT_SUCCESS;<br />}</p>
		<p>输出<br />&lt;!!&gt; &lt;Hello&gt; &lt;world&gt; &lt;foo&gt; &lt;bar&gt; &lt;yow&gt; &lt;baz&gt;<br />自定义分隔的标点</p>
		<p>例5:<br />    // char_sep_example_2.cpp<br />    #include &lt;iostream&gt;<br />    #include &lt;boost/tokenizer.hpp&gt;<br />    #include &lt;string&gt;</p>
		<p>    int main()<br />    {<br />        std::string str = ";;Hello|world||-foo--bar;yow;baz|";<br />        typedef boost::tokenizer&lt;boost::char_separator&lt;char&gt; &gt;<br />            tokenizer;<br />        boost::char_separator&lt;char&gt; sep("-;", "|", boost::keep_empty_tokens);<br />        tokenizer tokens(str, sep);<br />        for (tokenizer::iterator tok_iter = tokens.begin();<br />             tok_iter != tokens.end(); ++tok_iter)<br />          std::cout &lt;&lt; "&lt;" &lt;&lt; *tok_iter &lt;&lt; "&gt; ";<br />        std::cout &lt;&lt; "\n";<br />        return EXIT_SUCCESS;<br />    }</p>
		<p>The output is:</p>
		<p>    &lt;&gt; &lt;&gt; &lt;Hello&gt; &lt;|&gt; &lt;world&gt; &lt;|&gt; &lt;&gt; &lt;|&gt; &lt;&gt; &lt;foo&gt; &lt;&gt; &lt;bar&gt; &lt;yow&gt; &lt;baz&gt; &lt;|&gt; &lt;&gt;<br />去除-; , 保留|但将它看作是分隔符,当两个分隔符相邻的时候会自动加空格</p>
		<p>例6:<br />    // char_sep_example_3.cpp<br />    #include &lt;iostream&gt;<br />    #include &lt;boost/tokenizer.hpp&gt;<br />    #include &lt;string&gt;</p>
		<p>    int main()<br />    {<br />       std::string str = "This is,  a test";<br />       typedef boost::tokenizer&lt;boost::char_separator&lt;char&gt; &gt; Tok;<br />       boost::char_separator&lt;char&gt; sep; // default constructed<br />       Tok tok(str, sep);<br />       for(Tok::iterator tok_iter = tok.begin(); tok_iter != tok.end(); ++tok_iter)<br />         std::cout &lt;&lt; "&lt;" &lt;&lt; *tok_iter &lt;&lt; "&gt; ";<br />       std::cout &lt;&lt; "\n";<br />       return EXIT_SUCCESS;<br />    }</p>
		<p>The output is:</p>
		<p>    &lt;This&gt; &lt;is&gt; &lt;,&gt; &lt;a&gt; &lt;test&gt;<br />保留标点但将它看作分隔符<br /></p>
<img src ="http://www.cnitblog.com/_skyfly/aggbug/15046.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/_skyfly/" target="_blank">龙井2008</a> 2006-08-10 09:39 <a href="http://www.cnitblog.com/_skyfly/archive/2006/08/10/15046.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Boost:UTF-8 Codecvt Facet(unicode 和 utf-8 之间相互转码) [转贴]</title><link>http://www.cnitblog.com/_skyfly/archive/2006/08/10/15044.html</link><dc:creator>龙井2008</dc:creator><author>龙井2008</author><pubDate>Thu, 10 Aug 2006 01:38:00 GMT</pubDate><guid>http://www.cnitblog.com/_skyfly/archive/2006/08/10/15044.html</guid><wfw:comment>http://www.cnitblog.com/_skyfly/comments/15044.html</wfw:comment><comments>http://www.cnitblog.com/_skyfly/archive/2006/08/10/15044.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/_skyfly/comments/commentRss/15044.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/_skyfly/services/trackbacks/15044.html</trackback:ping><description><![CDATA[
		<div class="seperator">(原载：<a href="http://www.cppblog.com/zuroc/"><font color="#009933">http://www.cppblog.com/zuroc/</font></a>)<br /><br />看到有前辈写了一个<a id="viewpost1_TitleUrl" href="http://www.cppblog.com/kb/archive/2005/09/29/491.html"><font color="#003366">UTF-8与UNICODE相互转换的代码</font></a>,<font color="#003366"><font color="#000000">顺便提一下,希望可以给大家提供一点帮助.<br /></font><font color="#000000">下面是一些编码格式的bit长</font><br /></font></div>
		<p>Examples of fixed-width encoding forms:</p>
		<p>
		</p>
		<table class="gray">
				<tbody>
						<tr>
								<th class="grayfirst">Type</th>
								<th class="grayfirst">Each character<br />encoded as</th>
								<th class="grayfirst">Notes</th>
						</tr>
						<tr>
								<td class="graymiddle" width="25%">  7-bit</td>
								<td class="graymiddle">a single 7-bit quantity</td>
								<td class="graymiddle">example: <a class="charclass" href="http://www.unicode.org/unicode/reports/tr17/#ISO">ISO</a> 646 </td>
						</tr>
						<tr>
								<td class="graymiddle">  8-bit G0/G1 </td>
								<td class="graymiddle">a single 8-bit quantity</td>
								<td class="graymiddle">with constraints on use of C0 and C1 spaces</td>
						</tr>
						<tr>
								<td class="graymiddle">  8-bit </td>
								<td class="graymiddle">a single 8-bit quantity </td>
								<td class="graymiddle">with no constraints on use of C1 space</td>
						</tr>
						<tr>
								<td class="graymiddle">  8-bit <a class="charclass" href="http://www.unicode.org/unicode/reports/tr17/#EBCDIC">EBCDIC</a></td>
								<td class="graymiddle">a single 8-bit quantity </td>
								<td class="graymiddle">with the EBCDIC conventions rather than <a class="charclass" href="http://www.unicode.org/unicode/reports/tr17/#ASCII">ASCII</a> conventions</td>
						</tr>
						<tr>
								<td class="graymiddle">16-bit (<a class="charclass" href="http://www.unicode.org/unicode/reports/tr17/#UCS">UCS</a>-2) </td>
								<td class="graymiddle">a single 16-bit quantity </td>
								<td class="graymiddle">within a code space of 0..FFFF</td>
						</tr>
						<tr>
								<td class="graymiddle">32-bit (<a class="charclass" href="http://www.unicode.org/unicode/reports/tr17/#UCS">UCS</a>-4) </td>
								<td class="graymiddle">a single 32-bit quantity </td>
								<td class="graymiddle">within a code space 0..7FFFFFFF</td>
						</tr>
						<tr>
								<td class="graymiddle">32-bit (<a class="charclass" href="http://www.unicode.org/unicode/reports/tr17/#UTF">UTF</a>-32) </td>
								<td class="graymiddle">a single 32-bit quantity </td>
								<td class="graymiddle">within a code space of 0..10FFFF</td>
						</tr>
						<tr>
								<td class="graymiddle">16-bit <a class="charclass" href="http://www.unicode.org/unicode/reports/tr17/#DBCS">DBCS</a> process code </td>
								<td class="graymiddle">a single 16-bit quantity</td>
								<td class="graymiddle">example: UNIX widechar implementations of Asian CCS's</td>
						</tr>
						<tr>
								<td class="graymiddle">32-bit <a class="charclass" href="http://www.unicode.org/unicode/reports/tr17/#DBCS">DBCS</a> process code </td>
								<td class="graymiddle">a single 32-bit quantity</td>
								<td class="graymiddle">example: UNIX widechar implementations of Asian CCS's</td>
						</tr>
						<tr>
								<td class="graylast">
										<a class="charclass" href="http://www.unicode.org/unicode/reports/tr17/#DBCS">DBCS</a> Host </td>
								<td class="graylast">two 8-bit quantities</td>
								<td class="graylast">following IBM host conventions</td>
						</tr>
				</tbody>
		</table>
		<p>Examples of variable-width encoding forms:</p>
		<p>
		</p>
		<table class="gray">
				<tbody>
						<tr>
								<th class="grayfirst">Name</th>
								<th class="grayfirst">Characters are encoded as</th>
								<th class="grayfirst">Notes</th>
						</tr>
						<tr>
								<td class="graymiddle" width="25%">
										<a class="charclass" href="http://www.unicode.org/unicode/reports/tr17/#UTF">UTF</a>-8 </td>
								<td class="graymiddle">a mix of one to four 8-bit code units in Unicode<br />and one to six code units in 10646</td>
								<td class="graymiddle">used only with Unicode/10646</td>
						</tr>
						<tr>
								<td class="graylast">
										<a class="charclass" href="http://www.unicode.org/unicode/reports/tr17/#UTF">UTF</a>-16 </td>
								<td class="graylast">a mix of one to two 16 bit code units</td>
								<td class="graylast">used only with Unicode/10646</td>
						</tr>
				</tbody>
		</table>
		<br />Boost中提供了一个UTF-8 Codecvt Facet,可以在utf8和UCS-4(Unicode-32)之间转换.<br />使用方式如下<br /><br />  //...<br />  // My encoding type<br />  typedef wchar_t ucs4_t;<br /><br />  std::locale old_locale;<br />  std::locale utf8_locale(old_locale,new utf8_codecvt_facet&lt;ucs4_t&gt;);<br /><br />  // Set a New global locale<br />  std::locale::global(utf8_locale);<br /><br />  //  UCS-4 转换为 UTF-8<br />  {<br />    std::wofstream ofs("data.ucd");<br />    ofs.imbue(utf8_locale);<br />    std::copy(ucs4_data.begin(),ucs4_data.end(),<br />          std::ostream_iterator&lt;ucs4_t,ucs4_t&gt;(ofs));<br />  }<br /><br />  // 读入 UTF-8 ,转换为 UCS-4 <br />  std::vector&lt;ucs4_t&gt; from_file;<br />  {<br />    std::wifstream ifs("data.ucd");<br />    ifs.imbue(utf8_locale);<br />    ucs4_t item = 0;<br />    while (ifs &gt;&gt; item) from_file.push_back(item);<br />  }<br />  //...<br />UTF-8 Codecvt Facet详见<a href="http://www.boost.org/libs/serialization/doc/codecvt.html"><br />http://www.boost.org/libs/serialization/doc/codecvt.html</a><img src ="http://www.cnitblog.com/_skyfly/aggbug/15044.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/_skyfly/" target="_blank">龙井2008</a> 2006-08-10 09:38 <a href="http://www.cnitblog.com/_skyfly/archive/2006/08/10/15044.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC8问题：升级后重编译程序，atlplus.h无法识别CStringW，请问各位是否遇到同类问题(此贴原载CSDN)</title><link>http://www.cnitblog.com/_skyfly/archive/2006/08/01/14532.html</link><dc:creator>龙井2008</dc:creator><author>龙井2008</author><pubDate>Tue, 01 Aug 2006 13:12:00 GMT</pubDate><guid>http://www.cnitblog.com/_skyfly/archive/2006/08/01/14532.html</guid><wfw:comment>http://www.cnitblog.com/_skyfly/comments/14532.html</wfw:comment><comments>http://www.cnitblog.com/_skyfly/archive/2006/08/01/14532.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/_skyfly/comments/commentRss/14532.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/_skyfly/services/trackbacks/14532.html</trackback:ping><description><![CDATA[
		<p>
				<br />系统在VC7.1下开发，一直没问题，最近升级到VC8，然后重新编译，报如下错误：</p>
		<p>d:\program files\microsoft visual studio 8\vc\atlmfc\include\atlplus.h(647) : error C2065: 'CStringW' : undeclared identifier<br />d:\program files\microsoft visual studio 8\vc\atlmfc\include\atlplus.h(647) : error C2146: syntax error : missing ';' before identifier 'strW'<br />d:\program files\microsoft visual studio 8\vc\atlmfc\include\atlplus.h(647) : error C3861: 'strW': identifier not found</p>
		<p>但是在atlplus.h中明明已经include过atlstr.h：<br />...<br />#include &lt;shellapi.h&gt;<br />#include "atlevent.h"<br />#include &lt;cstringt.h&gt;<br />#include &lt;atlstr.h&gt;<br />//Avoid using &lt;atlstr.h&gt; except in the registry templates (for circular dependencies).</p>
		<p>[<br />provider(name="ATL4", uuid="BC6B4B8A-0E4A-4bc9-B319-9DC2ACFB61EE")<br />];<br />...<br />...<br />GetStringAtLoc(rgStrings, dwValue, rgBytes, &amp;szReplacement);<br />CStringW strW(szReplacement ? szReplacement : rgBytes.m_aT); // 在该行报错<br />...</p>
		<p>已经查了很久，没有解决办法，请问有朋友遇到过类似的情况没有，最后如何解决的？<br /><br />======================<br /><br />问题暂时解决，办法如下：</p>
		<p>1、在atlplus.h中，用&lt;stdstring.h&gt;代替&lt;atlstr.h&gt;：<br />（stdstring.h是Joe O'Leary编写的用于取代完整取代CString的类，基于std::string）</p>
		<p>#include &lt;stdstring.h&gt;</p>
		<p>2、修改报错行：<br />CStringW strW(szReplacement ? szReplacement : rgBytes.m_aT); // 在该行报错</p>
		<p>修改为：<br />CStdStringW　strW(szReplacement ? szReplacement : rgBytes.m_aT); // 该行通过</p>
		<p>现在编译已通过，但由于我改变了系统文件&lt;atlplus.h&gt;的内容，给atl额外引入了stl的负担，会影响atl完整性和高效性。该解决办法是很不恰当的。</p>
		<p>还请各位高人给出合适的解决办法，谢谢。<br /></p>
<img src ="http://www.cnitblog.com/_skyfly/aggbug/14532.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/_skyfly/" target="_blank">龙井2008</a> 2006-08-01 21:12 <a href="http://www.cnitblog.com/_skyfly/archive/2006/08/01/14532.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>程序运行后，立即隐藏到系统栏内 ( 期待更好的解决办法 )。</title><link>http://www.cnitblog.com/_skyfly/archive/2006/06/22/12699.html</link><dc:creator>龙井2008</dc:creator><author>龙井2008</author><pubDate>Thu, 22 Jun 2006 08:54:00 GMT</pubDate><guid>http://www.cnitblog.com/_skyfly/archive/2006/06/22/12699.html</guid><wfw:comment>http://www.cnitblog.com/_skyfly/comments/12699.html</wfw:comment><comments>http://www.cnitblog.com/_skyfly/archive/2006/06/22/12699.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/_skyfly/comments/commentRss/12699.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/_skyfly/services/trackbacks/12699.html</trackback:ping><description><![CDATA[
		<p>我写了一个程序，每N秒，定时对数据库进行刷新，以修正数据库内的一些数据。我把它放在启动菜单栏里，希望一开机就运行。同时希望程序一运行就隐藏到系统栏，这样不影响我使用其它程序。<br /><br />本来我是想直接在CMainDlg::OnInitDialog中用ShowWindow(SW_HIDE);的，但是很不幸，程序窗口依然显示。在网上查找一段时间以后没有找到解决办法，只好自行摸索了。<br /><br />最后我是通过延时发隐藏窗口请求来解决的（先显示窗口，等待一段时间，再隐藏窗口）。我想主窗口在CMainDlg::OnInitDialog中不能隐藏的原因，是该函数运行后，还有一些事件刷新了主窗口，所以我通过延时等待所有的主窗口事件处理完成以后再进行隐藏。<br /><br />在CMainDlg::OnInitDialog中：<br /></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000"> 设置定时间隔</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">SetTimer(IDT_TIMER_TOSYSTRAY,DELAY_TIME</span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">1000</span>
				<span style="COLOR: #000000">);</span>
		</div>
		<br />在CMainDlg::OnTimer中：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">switch</span><span style="COLOR: #000000">(wParam)<br />{<br /></span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000"> IDT_TIMER_TOSYSTRAY:<br />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 隐藏窗口到系统栏</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">    KillTimer(IDT_TIMER_TOSYSTRAY);<br />    SendMessage(WM_CLOSE);<br />    </span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000"> IDT_TIMER_REFRESH:<br />    </span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br />}<br /></span></div><br />真正的处理函数：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">LRESULT CMainDlg::OnClose(UINT </span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">uMsg</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000">, WPARAM </span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">wParam</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000">, LPARAM </span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">lParam</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000">, BOOL</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"> </span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">bHandled</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000">)<br />{<br />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> TODO: Add your message handler code here and/or call default</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (IsWindowVisible())<br />        ShowWindow(SW_HIDE);<br />    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br />}<br /></span></div><img src ="http://www.cnitblog.com/_skyfly/aggbug/12699.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/_skyfly/" target="_blank">龙井2008</a> 2006-06-22 16:54 <a href="http://www.cnitblog.com/_skyfly/archive/2006/06/22/12699.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>无法从IIS服务器上下载.tab类型文件</title><link>http://www.cnitblog.com/_skyfly/archive/2006/06/16/12333.html</link><dc:creator>龙井2008</dc:creator><author>龙井2008</author><pubDate>Fri, 16 Jun 2006 01:44:00 GMT</pubDate><guid>http://www.cnitblog.com/_skyfly/archive/2006/06/16/12333.html</guid><wfw:comment>http://www.cnitblog.com/_skyfly/comments/12333.html</wfw:comment><comments>http://www.cnitblog.com/_skyfly/archive/2006/06/16/12333.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/_skyfly/comments/commentRss/12333.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/_skyfly/services/trackbacks/12333.html</trackback:ping><description><![CDATA[我在公司的文件服务器上起了IIS 6 Web服务，在某目录内放置了.TAB文件(超级报表格式)，但是用浏览器下载文件的时候报错，无法下载。<br /><br />进入文件服务器上的IIS 管理器，右击“网站”==&gt;“网站属性”，选择“http头”，再选择“MIME类型” ==&gt; “新建”<br />==&gt;“扩展名”：.tab（注意，tab前面有点）==&gt;“MIME类型”：application/ChinaExcel<br /><br />问题解决，在客户端可以下载文件，如果客户端安装了ChanaExcel程序，则可以通过IE直接打开文件。<br /><br />原因：<br />见IIS6 属性页上的“MIME”描述：IIS只为扩展名在MIME类型列表中注册了的文件提供服务。.TAB为非标准文件后缀名，因此需要在IIS中进行注册，IIS对未注册文件不予处理。<img src ="http://www.cnitblog.com/_skyfly/aggbug/12333.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/_skyfly/" target="_blank">龙井2008</a> 2006-06-16 09:44 <a href="http://www.cnitblog.com/_skyfly/archive/2006/06/16/12333.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SVG使用体会</title><link>http://www.cnitblog.com/_skyfly/archive/2005/10/10/3200.html</link><dc:creator>龙井2008</dc:creator><author>龙井2008</author><pubDate>Mon, 10 Oct 2005 01:54:00 GMT</pubDate><guid>http://www.cnitblog.com/_skyfly/archive/2005/10/10/3200.html</guid><wfw:comment>http://www.cnitblog.com/_skyfly/comments/3200.html</wfw:comment><comments>http://www.cnitblog.com/_skyfly/archive/2005/10/10/3200.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/_skyfly/comments/commentRss/3200.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/_skyfly/services/trackbacks/3200.html</trackback:ping><description><![CDATA[这些天来研究XML的各类应用。前天花了近一天的时间来研究SVG图形文件格式。发现这个规范的确很好，如果研究好了，以后就应用在项目上，应该很酷的。<BR><BR>不过试验的时候，老是中文无法显示，搞得我灰头灰脸的。都怀疑我是不是弱智了。<BR><BR>按以前处理xml文件的经验，我先把语言编码加入SVG。呵呵，这里犯了一个错误，因此我的xmlWriter认为不是良好格式文档。原来是顺序声明错误啦。<BR><FONT color=#0000ff>&lt;?xml version="1.0" standalone="no" encodeing="GB2312" ?&gt;</FONT>，能看出来哪儿错了吗，原来应当写成<BR>&lt;?xml version="1.0" <FONT color=#ff0000>encodeing="GB2312"</FONT> standalone="no" ?&gt;，晕，没细看标准的代价，害得我在网上查来查去。<BR><BR>但是这样还是不能显示中文，再晕~~~~~~~~~~，再去网上查~~~~~~~~，哈哈，原来有人也遇到过这个问题哟，网上牛人蛮多呀，前辈哟，看看eureka的心得(<A href="http://www.ee-studio.com/drupal/node/447/print">http://www.ee-studio.com/drupal/node/447/print</A>)：<BR><BR>
<P><FONT style="BACKGROUND-COLOR: #7fffd4" size=2>好多SVG编辑器都有不能正常支持中文，后来自己手工创建SVG文件，却也不能在浏览器插件里正常显示。还以为是插件问题（如adobe svg viewer和corel svg viewer等），象我用inkscape，就能很好的处理中文，但却不能在浏览器里正常显示！不知为什么，还真以为插件问题。查看svg viewer的技术规范，都说是支持utf-8的，那是什么问题呢？难道是文字编码问题，后来几经测试，用各种编码及encoding头，还是不对劲。</FONT></P>
<P><FONT style="BACKGROUND-COLOR: #7fffd4" size=2>后来我好不容易总算琢磨出问题所在，原来你必须给中文加上中文字体。看来adbobe svg viewer和corel svg viewer缺省都没有带支持某种中文字体的，不象inkscape，能正常显示中文。因此，在这种情况下，给中文加上某种字体的样式，就可以正常显示而不是一些框框了，包括从W3C来的一些SVG中文幻灯片，给它加上中文某中字体的样式才行！</FONT></P>
<P><FONT style="BACKGROUND-COLOR: #7fffd4" size=2>不过我用的编辑器里，webdraw 和 xstudio还是不支持中文的！不能很好的处理，只有inkscape，能很好的支持中文。但它不带有原生的SVG代码编辑，其xml editor是对节点进行编辑的，不能对原文件进行编辑。呵呵，事物总是不断发展吧。</FONT></P>哈哈，这不正是我要的吗，试试去喽。感谢eureka!<BR><img src ="http://www.cnitblog.com/_skyfly/aggbug/3200.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/_skyfly/" target="_blank">龙井2008</a> 2005-10-10 09:54 <a href="http://www.cnitblog.com/_skyfly/archive/2005/10/10/3200.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常用到的网络资源</title><link>http://www.cnitblog.com/_skyfly/archive/2005/09/22/2831.html</link><dc:creator>龙井2008</dc:creator><author>龙井2008</author><pubDate>Thu, 22 Sep 2005 01:27:00 GMT</pubDate><guid>http://www.cnitblog.com/_skyfly/archive/2005/09/22/2831.html</guid><wfw:comment>http://www.cnitblog.com/_skyfly/comments/2831.html</wfw:comment><comments>http://www.cnitblog.com/_skyfly/archive/2005/09/22/2831.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/_skyfly/comments/commentRss/2831.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/_skyfly/services/trackbacks/2831.html</trackback:ping><description><![CDATA[<P>一、软件开发资源：<BR><A href="http://www.dreambrook.com/">http://www.dreambrook.com/</A><BR><BR>二、BLOG<BR><A href="http://blog.csdn.net/lwklchj/">http://blog.csdn.net/lwklchj/</A>&nbsp; 力挽狂澜的家<BR><BR>三、考试资源<BR><A href="http://www.kejiedu.cn/ruankao/index/index.php">http://www.kejiedu.cn/ruankao/index/index.php</A>&nbsp;南京科技教育局</P><img src ="http://www.cnitblog.com/_skyfly/aggbug/2831.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/_skyfly/" target="_blank">龙井2008</a> 2005-09-22 09:27 <a href="http://www.cnitblog.com/_skyfly/archive/2005/09/22/2831.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>软件的编码转换</title><link>http://www.cnitblog.com/_skyfly/archive/2005/09/14/2658.html</link><dc:creator>龙井2008</dc:creator><author>龙井2008</author><pubDate>Wed, 14 Sep 2005 06:30:00 GMT</pubDate><guid>http://www.cnitblog.com/_skyfly/archive/2005/09/14/2658.html</guid><wfw:comment>http://www.cnitblog.com/_skyfly/comments/2658.html</wfw:comment><comments>http://www.cnitblog.com/_skyfly/archive/2005/09/14/2658.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/_skyfly/comments/commentRss/2658.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/_skyfly/services/trackbacks/2658.html</trackback:ping><description><![CDATA[　　从上周开始，我开始将以前自己所做的Res3项目转化成UNICODE格式。<BR><BR>　　这个做法的动力来源有两个：<BR>　　一个就是人云亦云啦，看到不少文章中都说了UNICODE编码的好处，也有些心动。<BR><BR>　　第二个原因是，我对目前开发的整个项目的远景构想，是想把这个项目拆解成很多小的部分。使得这些小的项目资源可以提供给以后其它的项目使用。每个部分不管是对内还是对外的接口，都尽量依据现有的标准来开发完成。例如UNICODE、WebService、XML等等。<BR><BR>　　这次是我所做的一个小试验，来验证自己的想法是否可行，真是不做不知道，原先我认为将现有的代码转换成支持UNICODE，应当是一件很容易的事情。做起来才晓得，由于自己以前完全没有考虑过这种转换，很多遗留的代码，比如文字常量，都要手工进行转换。也许以后，我应当写出一个小的转换程序，用来辅助完成任务。<BR><BR>　　还有一个困难，就是我以前经常使用的开源代码，很多代码也是没有考虑到到UNICODE编码，这种情况下，我要么对源代码进行了修改，要么就换用了其它支持UNICODE的开源代码。好可惜哟，有些代码在ANSI下很好用的，现在只好放弃。<BR><BR>　　这次UNICODE转换试验完成后，会有很多心得，我会再整理记录下来，免得以后再走弯路。<BR><img src ="http://www.cnitblog.com/_skyfly/aggbug/2658.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/_skyfly/" target="_blank">龙井2008</a> 2005-09-14 14:30 <a href="http://www.cnitblog.com/_skyfly/archive/2005/09/14/2658.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>