﻿<?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>C++博客-I smell magic in the air-随笔分类-乱七八糟</title><link>http://www.cppblog.com/izualzhy/category/15403.html</link><description>坚持 相信自己</description><language>zh-cn</language><lastBuildDate>Thu, 12 Jul 2012 03:27:52 GMT</lastBuildDate><pubDate>Thu, 12 Jul 2012 03:27:52 GMT</pubDate><ttl>60</ttl><item><title>c语言实现urlencode和decode</title><link>http://www.cppblog.com/izualzhy/archive/2012/07/09/182456.html</link><dc:creator>izualzhy</dc:creator><author>izualzhy</author><pubDate>Mon, 09 Jul 2012 13:03:00 GMT</pubDate><guid>http://www.cppblog.com/izualzhy/archive/2012/07/09/182456.html</guid><wfw:comment>http://www.cppblog.com/izualzhy/comments/182456.html</wfw:comment><comments>http://www.cppblog.com/izualzhy/archive/2012/07/09/182456.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/izualzhy/comments/commentRss/182456.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/izualzhy/services/trackbacks/182456.html</trackback:ping><description><![CDATA[<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a2445897-7552-487a-b1ab-cb9899002be5" class="wlWriterEditableSmartContent">Technorati 标签: <a href="http://technorati.com/tags/urlencode" rel="tag">urlencode</a>,<a href="http://technorati.com/tags/urldecode" rel="tag">urldecode</a></div> <p>先看个例子：</p> <p>汉字 一 的UTF-8编码为0xE4 0xb8 0x 80</p> <p>我们在google里搜索一下&#8220;一&#8221;，地址栏显示为：</p> <p><a href="http://www.cppblog.com/images/cppblog_com/izualzhy/Windows-Live-Writer/14bd81d0cd82_11EDE/image_4.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.cppblog.com/images/cppblog_com/izualzhy/Windows-Live-Writer/14bd81d0cd82_11EDE/image_thumb_1.png" width="842" height="33" /></a></p> <p>可以看到url的字符串里有一个%E4%B8%80</p> <p>这就是encode之后的值。因此，encode的处理过程也很明显了。</p> <p>特别是传中文参数时，如果没有encode，很容易出错。</p> <p>至于为什么要这么传，就不知道了，今天，现来看下C语言如何实现url encode函数.</p> <p>首先是urlencode的编码规则，可以看这里，搜到一篇文章没有仔细研究，可能有不全的地方：</p> <p><a href="http://hi.baidu.com/leejun_2005/item/9e0f4e4ba62cde0bc11613b5">http://hi.baidu.com/leejun_2005/item/9e0f4e4ba62cde0bc11613b5<br /><span style="color: #000000; ">解码：</span> </a></p><pre class="code"><span style="color: #937a42">/*
 * =====================================================================================
 *       Filename:  url_decode.cpp
 *    Description:  url decode
 *
 *        Created:  07/06/2012 07:35:14 PM
 *         Author:  zhy (), izualzhy@163.com
 * =====================================================================================
 */

</span><span style="color: #400080">#include </span><span style="color: #259241">&lt;stdio.h&gt;
</span><span style="color: #400080">#include </span><span style="color: #259241">&lt;string.h&gt;

</span><span style="color: #400080">#define </span>NON_NUM <span style="color: #259241">'0'

</span><span style="color: #400080">int </span>hex2num<span style="color: #2e53d1">(</span><span style="color: #400080">char </span>c<span style="color: #2e53d1">)
{
    </span><span style="color: #400080">if </span><span style="color: #2e53d1">(</span>c<span style="color: #2e53d1">&gt;=</span><span style="color: #259241">'0' </span><span style="color: #2e53d1">&amp;&amp; </span>c<span style="color: #2e53d1">&lt;=</span><span style="color: #259241">'9'</span><span style="color: #2e53d1">) </span><span style="color: #400080">return </span>c <span style="color: #2e53d1">- </span><span style="color: #259241">'0'</span><span style="color: #2e53d1">;
    </span><span style="color: #400080">if </span><span style="color: #2e53d1">(</span>c<span style="color: #2e53d1">&gt;=</span><span style="color: #259241">'a' </span><span style="color: #2e53d1">&amp;&amp; </span>c<span style="color: #2e53d1">&lt;=</span><span style="color: #259241">'z'</span><span style="color: #2e53d1">) </span><span style="color: #400080">return </span>c <span style="color: #2e53d1">- </span><span style="color: #259241">'a' </span><span style="color: #2e53d1">+ </span><span style="color: #259241">10</span><span style="color: #2e53d1">;</span><span style="color: #937a42">//这里+10的原因是:比如16进制的a值为10
    </span><span style="color: #400080">if </span><span style="color: #2e53d1">(</span>c<span style="color: #2e53d1">&gt;=</span><span style="color: #259241">'A' </span><span style="color: #2e53d1">&amp;&amp; </span>c<span style="color: #2e53d1">&lt;=</span><span style="color: #259241">'Z'</span><span style="color: #2e53d1">) </span><span style="color: #400080">return </span>c <span style="color: #2e53d1">- </span><span style="color: #259241">'A' </span><span style="color: #2e53d1">+ </span><span style="color: #259241">10</span><span style="color: #2e53d1">;
    
    </span>printf<span style="color: #2e53d1">(</span><span style="color: #259241">"unexpected char: %c"</span><span style="color: #2e53d1">, </span>c<span style="color: #2e53d1">);
    </span><span style="color: #400080">return </span>NON_NUM<span style="color: #2e53d1">;
}

</span><span style="color: #937a42">/**
 * @brief URLDecode 对字符串URL解码,编码的逆过程
 *
 * @param str 原字符串
 * @param strSize 原字符串大小（不包括最后的\0）
 * @param result 结果字符串缓存区
 * @param resultSize 结果地址的缓冲区大小(包括最后的\0)
 *
 * @return: &gt;0 result 里实际有效的字符串长度
 *            0 解码失败
 */
</span><span style="color: #400080">int </span>URLDecode<span style="color: #2e53d1">(</span><span style="color: #400080">const char</span><span style="color: #2e53d1">* </span>str<span style="color: #2e53d1">, </span><span style="color: #400080">const int </span>strSize<span style="color: #2e53d1">, </span><span style="color: #400080">char</span><span style="color: #2e53d1">* </span>result<span style="color: #2e53d1">, </span><span style="color: #400080">const int </span>resultSize<span style="color: #2e53d1">)
{
    </span><span style="color: #400080">char </span>ch<span style="color: #2e53d1">,</span>ch1<span style="color: #2e53d1">,</span>ch2<span style="color: #2e53d1">;
    </span><span style="color: #400080">int </span>i<span style="color: #2e53d1">;
    </span><span style="color: #400080">int </span>j <span style="color: #2e53d1">= </span><span style="color: #259241">0</span><span style="color: #2e53d1">;</span><span style="color: #937a42">//record result index

    </span><span style="color: #400080">if </span><span style="color: #2e53d1">((</span>str<span style="color: #2e53d1">==</span>NULL<span style="color: #2e53d1">) || (</span>result<span style="color: #2e53d1">==</span>NULL<span style="color: #2e53d1">) || (</span>strSize<span style="color: #2e53d1">&lt;=</span><span style="color: #259241">0</span><span style="color: #2e53d1">) || (</span>resultSize<span style="color: #2e53d1">&lt;=</span><span style="color: #259241">0</span><span style="color: #2e53d1">)) {
        </span><span style="color: #400080">return </span><span style="color: #259241">0</span><span style="color: #2e53d1">;
    }

    </span><span style="color: #400080">for </span><span style="color: #2e53d1">( </span>i<span style="color: #2e53d1">=</span><span style="color: #259241">0</span><span style="color: #2e53d1">; (</span>i<span style="color: #2e53d1">&lt;</span>strSize<span style="color: #2e53d1">) &amp;&amp; (</span>j<span style="color: #2e53d1">&lt;</span>resultSize<span style="color: #2e53d1">); ++</span>i<span style="color: #2e53d1">) {
        </span>ch <span style="color: #2e53d1">= </span>str<span style="color: #2e53d1">[</span>i<span style="color: #2e53d1">];
        </span><span style="color: #400080">switch </span><span style="color: #2e53d1">(</span>ch<span style="color: #2e53d1">) {
            </span><span style="color: #400080">case </span><span style="color: #259241">'+'</span><span style="color: #2e53d1">:
                </span>result<span style="color: #2e53d1">[</span>j<span style="color: #2e53d1">++] = </span><span style="color: #259241">' '</span><span style="color: #2e53d1">;
                </span><span style="color: #400080">break</span><span style="color: #2e53d1">;
            </span><span style="color: #400080">case </span><span style="color: #259241">'%'</span><span style="color: #2e53d1">:
                </span><span style="color: #400080">if </span><span style="color: #2e53d1">(</span>i<span style="color: #2e53d1">+</span><span style="color: #259241">2</span><span style="color: #2e53d1">&lt;</span>strSize<span style="color: #2e53d1">) {
                    </span>ch1 <span style="color: #2e53d1">= </span>hex2num<span style="color: #2e53d1">(</span>str<span style="color: #2e53d1">[</span>i<span style="color: #2e53d1">+</span><span style="color: #259241">1</span><span style="color: #2e53d1">]);</span><span style="color: #937a42">//高4位
                    </span>ch2 <span style="color: #2e53d1">= </span>hex2num<span style="color: #2e53d1">(</span>str<span style="color: #2e53d1">[</span>i<span style="color: #2e53d1">+</span><span style="color: #259241">2</span><span style="color: #2e53d1">]);</span><span style="color: #937a42">//低4位
                    </span><span style="color: #400080">if </span><span style="color: #2e53d1">((</span>ch1<span style="color: #2e53d1">!=</span>NON_NUM<span style="color: #2e53d1">) &amp;&amp; (</span>ch2<span style="color: #2e53d1">!=</span>NON_NUM<span style="color: #2e53d1">))
                        </span>result<span style="color: #2e53d1">[</span>j<span style="color: #2e53d1">++] = (</span><span style="color: #400080">char</span><span style="color: #2e53d1">)((</span>ch1<span style="color: #2e53d1">&lt;&lt;</span><span style="color: #259241">4</span><span style="color: #2e53d1">) | </span>ch2<span style="color: #2e53d1">);
                    </span>i <span style="color: #2e53d1">+= </span><span style="color: #259241">2</span><span style="color: #2e53d1">;
                    </span><span style="color: #400080">break</span><span style="color: #2e53d1">;
                } </span><span style="color: #400080">else </span><span style="color: #2e53d1">{
                    </span><span style="color: #400080">break</span><span style="color: #2e53d1">;
                }
            </span><span style="color: #400080">default</span><span style="color: #2e53d1">:
                </span>result<span style="color: #2e53d1">[</span>j<span style="color: #2e53d1">++] = </span>ch<span style="color: #2e53d1">;
                </span><span style="color: #400080">break</span><span style="color: #2e53d1">;
        }
    }
    
    </span>result<span style="color: #2e53d1">[</span>j<span style="color: #2e53d1">] = </span><span style="color: #259241">0</span><span style="color: #2e53d1">;
    </span><span style="color: #400080">return </span>j<span style="color: #2e53d1">;
}

</span><span style="color: #400080">int </span>main<span style="color: #2e53d1">(</span><span style="color: #400080">int </span>argc<span style="color: #2e53d1">, </span><span style="color: #400080">char</span><span style="color: #2e53d1">* </span>argv<span style="color: #2e53d1">[])
{
    </span><span style="color: #400080">char</span><span style="color: #2e53d1">* </span>src <span style="color: #2e53d1">= </span>argv<span style="color: #2e53d1">[</span><span style="color: #259241">1</span><span style="color: #2e53d1">];
    </span><span style="color: #400080">char </span>obj<span style="color: #2e53d1">[</span><span style="color: #259241">100</span><span style="color: #2e53d1">] = {</span><span style="color: #259241">0</span><span style="color: #2e53d1">};

    </span><span style="color: #400080">unsigned int </span>len <span style="color: #2e53d1">= </span>strlen<span style="color: #2e53d1">(</span>src<span style="color: #2e53d1">);
    </span><span style="color: #400080">int </span>resultSize <span style="color: #2e53d1">= </span>URLDecode<span style="color: #2e53d1">(</span>src<span style="color: #2e53d1">, </span>len<span style="color: #2e53d1">, </span>obj<span style="color: #2e53d1">, </span><span style="color: #259241">100</span><span style="color: #2e53d1">);
    </span>printf<span style="color: #2e53d1">(</span><span style="color: #259241">"result: %d, %s\n"</span><span style="color: #2e53d1">, </span>resultSize<span style="color: #2e53d1">, </span>obj<span style="color: #2e53d1">);

    </span><span style="color: #400080">return </span><span style="color: #259241">0</span><span style="color: #2e53d1">;

}
</span></pre>
<p>编码：</p><pre class="code"><span style="color: #937a42">/*
 * =====================================================================================
 *       Filename:  url_encode.cpp
 *    Description:  url encode
 *
 *        Created:  07/04/2012 08:32:24 PM
 *
 *         Author:  zhy (), izualzhy@163.com
 * =====================================================================================
 */
</span><span style="color: #400080">#include </span><span style="color: #259241">&lt;stdio.h&gt;
</span><span style="color: #400080">#include </span><span style="color: #259241">&lt;string.h&gt;

</span><span style="color: #937a42">/**
 * @brief URLEncode 对字符串URL编码
 *
 * @param str 原字符串
 * @param strSize 原字符串长度(不包括最后的\0)
 * @param result 结果缓冲区的地址
 * @param resultSize 结果缓冲区的大小(包括最后的\0)
 *
 * @return: &gt;0:resultstring 里实际有效的长度
 *            0: 解码失败.
 */
</span><span style="color: #400080">int </span>URLEncode<span style="color: #2e53d1">(</span><span style="color: #400080">const char</span><span style="color: #2e53d1">* </span>str<span style="color: #2e53d1">, </span><span style="color: #400080">const int </span>strSize<span style="color: #2e53d1">, </span><span style="color: #400080">char</span><span style="color: #2e53d1">* </span>result<span style="color: #2e53d1">, </span><span style="color: #400080">const int </span>resultSize<span style="color: #2e53d1">)
{
    </span><span style="color: #400080">int </span>i<span style="color: #2e53d1">;
    </span><span style="color: #400080">int </span>j <span style="color: #2e53d1">= </span><span style="color: #259241">0</span><span style="color: #2e53d1">;</span><span style="color: #937a42">//for result index
    </span><span style="color: #400080">char </span>ch<span style="color: #2e53d1">;

    </span><span style="color: #400080">if </span><span style="color: #2e53d1">((</span>str<span style="color: #2e53d1">==</span>NULL<span style="color: #2e53d1">) || (</span>result<span style="color: #2e53d1">==</span>NULL<span style="color: #2e53d1">) || (</span>strSize<span style="color: #2e53d1">&lt;=</span><span style="color: #259241">0</span><span style="color: #2e53d1">) || (</span>resultSize<span style="color: #2e53d1">&lt;=</span><span style="color: #259241">0</span><span style="color: #2e53d1">)) {
        </span><span style="color: #400080">return </span><span style="color: #259241">0</span><span style="color: #2e53d1">;
    }

    </span><span style="color: #400080">for </span><span style="color: #2e53d1">( </span>i<span style="color: #2e53d1">=</span><span style="color: #259241">0</span><span style="color: #2e53d1">; (</span>i<span style="color: #2e53d1">&lt;</span>strSize<span style="color: #2e53d1">)&amp;&amp;(</span>j<span style="color: #2e53d1">&lt;</span>resultSize<span style="color: #2e53d1">); ++</span>i<span style="color: #2e53d1">) {
        </span>ch <span style="color: #2e53d1">= </span>str<span style="color: #2e53d1">[</span>i<span style="color: #2e53d1">];
        </span><span style="color: #400080">if </span><span style="color: #2e53d1">(((</span>ch<span style="color: #2e53d1">&gt;=</span><span style="color: #259241">'A'</span><span style="color: #2e53d1">) &amp;&amp; (</span>ch<span style="color: #2e53d1">&lt;</span><span style="color: #259241">'Z'</span><span style="color: #2e53d1">)) ||
            ((</span>ch<span style="color: #2e53d1">&gt;=</span><span style="color: #259241">'a'</span><span style="color: #2e53d1">) &amp;&amp; (</span>ch<span style="color: #2e53d1">&lt;</span><span style="color: #259241">'z'</span><span style="color: #2e53d1">)) ||
            ((</span>ch<span style="color: #2e53d1">&gt;=</span><span style="color: #259241">'0'</span><span style="color: #2e53d1">) &amp;&amp; (</span>ch<span style="color: #2e53d1">&lt;</span><span style="color: #259241">'9'</span><span style="color: #2e53d1">))) {
            </span>result<span style="color: #2e53d1">[</span>j<span style="color: #2e53d1">++] = </span>ch<span style="color: #2e53d1">;
        } </span><span style="color: #400080">else if </span><span style="color: #2e53d1">(</span>ch <span style="color: #2e53d1">== </span><span style="color: #259241">' '</span><span style="color: #2e53d1">) {
            </span>result<span style="color: #2e53d1">[</span>j<span style="color: #2e53d1">++] = </span><span style="color: #259241">'+'</span><span style="color: #2e53d1">;
        } </span><span style="color: #400080">else if </span><span style="color: #2e53d1">(</span>ch <span style="color: #2e53d1">== </span><span style="color: #259241">'.' </span><span style="color: #2e53d1">|| </span>ch <span style="color: #2e53d1">== </span><span style="color: #259241">'-' </span><span style="color: #2e53d1">|| </span>ch <span style="color: #2e53d1">== </span><span style="color: #259241">'_' </span><span style="color: #2e53d1">|| </span>ch <span style="color: #2e53d1">== </span><span style="color: #259241">'*'</span><span style="color: #2e53d1">) {
            </span>result<span style="color: #2e53d1">[</span>j<span style="color: #2e53d1">++] = </span>ch<span style="color: #2e53d1">;
        } </span><span style="color: #400080">else </span><span style="color: #2e53d1">{
            </span><span style="color: #400080">if </span><span style="color: #2e53d1">(</span>j<span style="color: #2e53d1">+</span><span style="color: #259241">3 </span><span style="color: #2e53d1">&lt; </span>resultSize<span style="color: #2e53d1">) {
                </span>sprintf<span style="color: #2e53d1">(</span>result<span style="color: #2e53d1">+</span>j<span style="color: #2e53d1">, </span><span style="color: #259241">"%%%02X"</span><span style="color: #2e53d1">, (</span><span style="color: #400080">unsigned char</span><span style="color: #2e53d1">)</span>ch<span style="color: #2e53d1">);
                </span>j <span style="color: #2e53d1">+= </span><span style="color: #259241">3</span><span style="color: #2e53d1">;
            } </span><span style="color: #400080">else </span><span style="color: #2e53d1">{
                </span><span style="color: #400080">return </span><span style="color: #259241">0</span><span style="color: #2e53d1">;
            }
        }
    }

    </span>result<span style="color: #2e53d1">[</span>j<span style="color: #2e53d1">] = </span><span style="color: #259241">'\0'</span><span style="color: #2e53d1">;
    </span><span style="color: #400080">return </span>j<span style="color: #2e53d1">;
}

</span><span style="color: #400080">int </span>main<span style="color: #2e53d1">(</span><span style="color: #400080">int </span>argc<span style="color: #2e53d1">, </span><span style="color: #400080">char</span><span style="color: #2e53d1">* </span>argv<span style="color: #2e53d1">[])
{
    </span><span style="color: #400080">char</span><span style="color: #2e53d1">* </span>src <span style="color: #2e53d1">= </span>argv<span style="color: #2e53d1">[</span><span style="color: #259241">1</span><span style="color: #2e53d1">];
    </span><span style="color: #400080">unsigned int </span>srclength <span style="color: #2e53d1">= </span>strlen<span style="color: #2e53d1">(</span>src<span style="color: #2e53d1">);
    </span>printf<span style="color: #2e53d1">(</span><span style="color: #259241">"src length: %d\n"</span><span style="color: #2e53d1">, </span>strlen<span style="color: #2e53d1">(</span>src<span style="color: #2e53d1">));
    

    </span><span style="color: #400080">char </span>obj<span style="color: #2e53d1">[</span><span style="color: #259241">100</span><span style="color: #2e53d1">] = {</span><span style="color: #259241">0</span><span style="color: #2e53d1">};
    </span>URLEncode<span style="color: #2e53d1">(</span>src<span style="color: #2e53d1">, </span>srclength<span style="color: #2e53d1">, </span>obj<span style="color: #2e53d1">, </span><span style="color: #259241">100</span><span style="color: #2e53d1">);

    </span>printf<span style="color: #2e53d1">(</span><span style="color: #259241">"obj: %s\n"</span><span style="color: #2e53d1">, </span>obj<span style="color: #2e53d1">);
    </span>printf<span style="color: #2e53d1">(</span><span style="color: #259241">"obj: %d\n"</span><span style="color: #2e53d1">, </span>strlen<span style="color: #2e53d1">(</span>obj<span style="color: #2e53d1">));

    </span><span style="color: #400080">return </span><span style="color: #259241">0</span><span style="color: #2e53d1">;
}

</span></pre>
<p>输出：</p>
<p>y@y-VirtualBox:/mnt/Documents/Training$ ./url_encode 一^abc_二<br />src length: 11<br />obj: %E4%B8%80%5Eabc_%E4%BA%8C<br />obj: 25<br />y@y-VirtualBox:/mnt/Documents/Training$ ./url_decode %E4%B8%80%5Eabc_%E4%BA%8C<br />result: 11, 一^abc_二</p>
<p>使用google搜索下：</p>
<p><a href="http://www.cppblog.com/images/cppblog_com/izualzhy/Windows-Live-Writer/14bd81d0cd82_11EDE/image_5.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.cppblog.com/images/cppblog_com/izualzhy/Windows-Live-Writer/14bd81d0cd82_11EDE/image_thumb.png" width="1055" height="175" /></a><br /></p>
<p>注：</p>
<p>1.AA &#8211;&gt; &#8220;%AA&#8221;,使用sprintf。</p>
<p>2.&#8221;%AA&#8221; &#8211;&gt; AA, 使用位移。</p>
<p>参考:</p>
<p><a href="http://hi.baidu.com/zkheartboy/blog/item/5813a28fa0d224ebf11f363d.html">http://hi.baidu.com/zkheartboy/blog/item/5813a28fa0d224ebf11f363d.html</a></p>
<p><a href="http://hi.baidu.com/leejun_2005/item/9e0f4e4ba62cde0bc11613b5">http://hi.baidu.com/leejun_2005/item/9e0f4e4ba62cde0bc11613b5</a></p><img src ="http://www.cppblog.com/izualzhy/aggbug/182456.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/izualzhy/" target="_blank">izualzhy</a> 2012-07-09 21:03 <a href="http://www.cppblog.com/izualzhy/archive/2012/07/09/182456.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Google code+Svn进行项目开发</title><link>http://www.cppblog.com/izualzhy/archive/2012/07/04/181400.html</link><dc:creator>izualzhy</dc:creator><author>izualzhy</author><pubDate>Wed, 04 Jul 2012 12:00:00 GMT</pubDate><guid>http://www.cppblog.com/izualzhy/archive/2012/07/04/181400.html</guid><wfw:comment>http://www.cppblog.com/izualzhy/comments/181400.html</wfw:comment><comments>http://www.cppblog.com/izualzhy/archive/2012/07/04/181400.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/izualzhy/comments/commentRss/181400.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/izualzhy/services/trackbacks/181400.html</trackback:ping><description><![CDATA[<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:24d2e8d7-3bc7-491a-b734-4fad5e351808" class="wlWriterEditableSmartContent">Technorati 标签: <a href="http://technorati.com/tags/svn" rel="tag">svn</a>,<a href="http://technorati.com/tags/google+code" rel="tag">google code</a></div> <p>1.搜索可以搜出一堆东西来，上手其实很简单。就不复制粘贴了。</p> <p>主要说下自己碰到的问题：</p> <p>1.密码问题：</p> <p>点击后页面打不开</p> <p>2.提示Operation not permitted<br>想来想去不知道是不是NTFS的原因（我的ubuntu是虚拟机），于是不在linux和win的共享文件下执行svn co的命令，搞定</p><img src ="http://www.cppblog.com/izualzhy/aggbug/181400.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/izualzhy/" target="_blank">izualzhy</a> 2012-07-04 20:00 <a href="http://www.cppblog.com/izualzhy/archive/2012/07/04/181400.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>今年我们二十七八岁</title><link>http://www.cppblog.com/izualzhy/archive/2012/06/17/179148.html</link><dc:creator>izualzhy</dc:creator><author>izualzhy</author><pubDate>Sun, 17 Jun 2012 02:28:00 GMT</pubDate><guid>http://www.cppblog.com/izualzhy/archive/2012/06/17/179148.html</guid><wfw:comment>http://www.cppblog.com/izualzhy/comments/179148.html</wfw:comment><comments>http://www.cppblog.com/izualzhy/archive/2012/06/17/179148.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/izualzhy/comments/commentRss/179148.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/izualzhy/services/trackbacks/179148.html</trackback:ping><description><![CDATA[早上起床，看到很多人的状态，我知道今天又是一个感情泛滥的日子。<br />在这个奇怪的又充满理性的社会，太多的人漂在外面。总在某些时刻，心头那些一直牵挂不敢忘记的情绪难以抑制，羁绊于心，纠结在胸，或流于指尖，或倾诉从口中，不知觉间，两行泪悄然的滴落。<br />我想起十七八岁的年纪，少年情怀尽是诗，以为外面的世界多么精彩。拼了命也要考到外面的学校里去看看。如今当年的无忧无虑已经变成了满腹牢骚愁肠断，而我今年也有二十七八岁。十年，换来那么多的回忆。总是感慨突然间街上就涌现了一群活泼欢乐的少年，仿佛有自己的身影。唏嘘于自己的称呼已换成了叔叔、阿姨，直到偶尔放假回家，听到父母被称作爷爷奶奶。那刻突然就想到了小时候长辈们的身影，于是我假装不经意间仔细的去看，父母的头上，早已爬上了白发。而我唏嘘感叹的十年，不过是我长大成熟的十年，父母却是老了十年。<br />其实心里一直是个孩子啊，哪怕赚的比父母要多，玩笑间可以说自己多么出息，可内心，经不住疲惫，经不住拷问，经不住那么多的情绪，多想知道下一步路该怎么走，在越来越不懂霓虹闪烁的十字路口，像孩子那样迷茫与彷徨，一步步的试探，抬起头望天，想知道答案。<br />其实很怀念小时候，放了学有时候父母会放下农活，去学校接我。再大一点，脖子上就挂了一个钥匙，红色的毛线系着一个钥匙，那是小时候很以为自豪的事情，放学后回到家里，写完作业，如果那块地离家不远，我就跑到坡上，来到自家的田地，跟在父母的身后，捡些零碎的活干，或者蹲在地头捉着蛐蛐，或者在松软的地里尽情的翻滚与玩耍。等天黑了，坐在车子后面跟着父母回家。等上了初中，生活就渐渐变了，上了高中，基本上一个月才回家一趟，本科，研究生，工作了......时间也越来越少，现在的我回家，再去自家的田地，却经常有种无所适从的感觉，而我无论如何再努力的回忆，但怎么也想不起自己小时候在这里玩耍的影子来。<img src ="http://www.cppblog.com/izualzhy/aggbug/179148.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/izualzhy/" target="_blank">izualzhy</a> 2012-06-17 10:28 <a href="http://www.cppblog.com/izualzhy/archive/2012/06/17/179148.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]程序员，你真的懂得收发电子邮件吗？</title><link>http://www.cppblog.com/izualzhy/archive/2012/06/07/177954.html</link><dc:creator>izualzhy</dc:creator><author>izualzhy</author><pubDate>Thu, 07 Jun 2012 10:34:00 GMT</pubDate><guid>http://www.cppblog.com/izualzhy/archive/2012/06/07/177954.html</guid><wfw:comment>http://www.cppblog.com/izualzhy/comments/177954.html</wfw:comment><comments>http://www.cppblog.com/izualzhy/archive/2012/06/07/177954.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/izualzhy/comments/commentRss/177954.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/izualzhy/services/trackbacks/177954.html</trackback:ping><description><![CDATA[<p><a href="http://blog.csdn.net/dinglang_2009/article/details/7640372">http://blog.csdn.net/dinglang_2009/article/details/7640372</a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>前言 <p>在几年以前，相信不少朋友都听说过，马云同志创办阿里巴巴的时候，还不会发邮件。也不知道在阿里巴巴上市之后，他学会收发邮件了没有！呵呵。我是曾经从内心里“瞧不起”过，至少认为在这一点上我比他强很多。后来我才发现，我未必懂得收发邮件。除了我，还有很多的码农也根本不懂得收发邮件，更不懂得Email里面的工作原理。借此，向大家介绍一下和Email相关的技术。 <p>老实说，我在七八年前就有了自己的雅虎邮箱，一直断断续续有用过。直到后来参加工作后，由于经常需要邮件沟通，我才发现，原来电子邮件是这样用的。在我的习惯思维里，一直以为邮箱是必须在提供商的网站上才能登录，然后必须在对应的网页里收发、查看、删除邮件（比如我注册了雅虎邮箱，必须在雅虎网站去登录，然后才能进去操作）。后来有同事推荐了FoxMail，在配置过程中，我才知道了什么是SMTP/POP3协议，后来才发现，原来office中的Outlook，也是一款优秀的邮件客户端。或许有很多朋友和我一样，也是这么天真的认为的。聊点题外话，其实一般的大公司都非常注重“邮件”的，这包含你日常工作中的沟通，工作安排，工作记录等。每天及时收发邮件，也是一种良好的工作习惯。一般公司都有自己的企业邮箱和邮件客户端。当然，小公司好像不太提倡这个，面对面沟通就好了，一般的根本没有这个“工作习惯”。所以，很多人根本没去了解过。包括我们很多开发人员，IT人员，都还不太了解其流程及工作原理。 <p>浅析电子邮件的原理 <p>在配置Outlook或者foxMail来收发邮件时，肯定会遇到SMTP协议和POP3协议的配置选项。那这两个协议分别是啥意思呢？网上都有翻译，我不会复制粘贴了。 <p>首先，我会介绍一些常识，然后结合通俗的例子，再结合图文的方式来讲讲电子邮局其中的流程及工作原理。随后，我将会用windows 命令行的方式，登录邮件服务器，用命令行的方式手工发送/接受一封电子邮件。相信这样子，你将会透彻的理解其中的工作原理。 <p>电子邮件的一些基本常识： <p>1.邮件服务器 <p>2.电子邮箱 <p>3.邮件客户端软件 <p>4.邮件传输协议 <p>5.电子邮件的传输过程 <p>首先要明白这些“是懂非懂”的概念，才能更好的理解。 <p>在Internet上要想提供电子邮件的功能，必须要有专门的电子邮件服务器。国内比较有名的就是“四大门户”的邮箱，国外的包括Gmail、Yahoo等。这些都是面向公众的，而且大部分免费提供的。大多数的企业，也都具有自己的企业邮件服务器，提供内部使用，或者日常工作中对外使用。 <p>电子邮件服务器的主要功能： <p>1）接受用户投递过来的邮件&nbsp;&nbsp; <p>2）将用户投递过来的邮件转发给目标邮件服务器&nbsp;&nbsp; <p>3）接受其他邮件服务器转发过来的点邮件，并存入到为其管理者所分配的空间中&nbsp;&nbsp; <p>4）为前来查收/读取邮件的用户提供服务（当然还包含删除。移动等等操作） <p>如图所示： <p><img alt="" src="http://pic002.cnblogs.com/images/2012/97364/2012060700093257.jpg"> <p>1.用户Dylan写好一封邮件，交给了Sina的邮件服务器。完成第一步操作，这使用的就是SMTP协议。用户提交，服务器接受，使用的都是SMTP协议。 <p>2.Sina的邮件服务器收到Dylan的邮件后，根据地址信息，又转发给了QQ的邮件服务器，这两台邮件服务器的收发，使用的都是SMTP协议。 <p>3.有人用QQ邮箱，发送了一封Email给Dylan。所以，QQ的邮件服务器，将邮件发送给Sina的邮件服务器。这两台服务器的收发，使用的都是SMTP协议。 <p>4.第四部比较特殊。是用户Dylan先主动请求Sina的邮件服务器，要求取自己的邮件。服务器知道后，再将该用户Dylan所管理的存储空间中的邮件，返回出去给Dylan。请一定记住，是用户先请求，而不是服务器先响应。这个过程中使用的POP3协议。 <p>网上有些人解释，说SMTP协议就是负责发邮件，POP3协议就是负责收邮件。其实这是不太正确的。多台邮件服务器之间通信，收/发其实都是使用的SMTP协议。 <p>而用户必须主动请求邮件服务器，才能获取到属于用户自己的邮件信息。这个过程中，才使用的是POP3。 <p>其实可以把Internet上的“电子邮件服务器”，当作是一种“电子邮局”，或者直接理解为现实生活中的邮局。 <p>1）用户递交包裹给深圳的邮局，深圳的邮局接受到包裹，再把包裹转发给了武汉的邮局。这其实易经完成了一次邮寄过程，使用的都是SMTP协议。 <p>2）而邮局通常不会主动送货给用户的，也不主动通知你（除了最近几年流行的EMS外）。所以，用户只能主动跑到邮局去，询问邮局的工作人员。 <p>&nbsp;&nbsp;&nbsp; 如果邮局的人发现有属于该用户的包裹，会将包裹交给该用户。这个过程就使用的是POP3协议。 <p>请牢记，邮局不会像快递那样主动送货的，必须是用户主动去邮局询问并取包裹。所谓协议，其实可以理解为一种规范，一种特定的“通话语言”。 <p>前面说了这么通俗的例子，相信你已经了解了大致的流程，更重要的是，明白了SMTP/POP3这两种协议。（当然，还有其他的协议，这里不做过多介绍） <p>友情提示：本文不打算讲解如何配置一台邮件服务器，因为这是网络管理员/系统管理员应该掌握的内容。市面上的邮件服务器软件繁多，在不同的服务器系统上也有多种实现。微软的<strong>Exchange Server ， Apache James </strong>这些都是比较流行的<strong>。</strong> <p>电子邮件的传输过程，详细信息如图： <p><img alt="" src="http://pic002.cnblogs.com/images/2012/97364/2012060700322566.jpg"> <p>图上已经标明得很清楚了，相信经过前面的介绍。大家都能够理解整个交互过程了。 <p>下面，我讲用windows命令行的方式，来演示发送和接收/查看电子邮件 <p>首先，登录我的sina邮箱，准备发送一封邮件到我的QQ邮箱里面去。 <p>运行“cmd”，打开Commond控制台。（提醒大家一下，这不是DOS。我经常发现某些人把其称为DOS，觉得很可笑。还有些培训讲师说这是DOS，误人子弟） <p>使用telnet命令，输入 telnet smtp.sina.com 25&nbsp;&nbsp; 回车 <p>注释：sina提供的SMTP服务器地址是 smtp.sina.com ，使用的端口号是SMTP协议默认端口号 25 （Gmail好像用的是465和587） <p>提示：部分用户使用的windows 7的操作系统，可能会提示telnet命令不可用。请在控制面板，”打开/关闭功能“中安装telnet客户端，具体不解释。如果有些朋友还没有用过telnet，那我也只能先吐血了。天朝程序员水平参差不齐，作为一个windows平台上的开发人员，大部分的连个基本的Dos命令都不会。 <p>有图有真相，我在每行命令和输入里，都加了详细的注释： <p><img alt="" src="http://pic002.cnblogs.com/images/2012/97364/2012060700432549.jpg"> <p>发送完成后，开始准备接受并查看邮件了 <p>同理，telnet 到POP3服务器去 <p>telnet pop.qq.com 110&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 腾讯的POP3服务器地址是pop.qq.com&nbsp;&nbsp; 使用的端口号也是默认的 110 （报警啊！） <p>有图有真相： <p><img alt="" src="http://pic002.cnblogs.com/images/2012/97364/2012060700463474.jpg"> <p>好了，朋友们不妨试着用命令行的方式，去体验电子邮件的过程，这能够帮助你理解其中的原理。时间不早了，码奴也要准备休息了。 <p>改天将会向大家详细讲解，在.NET平台中发送邮件的几种情况和实现方式（包括：群发的命中问题、垃圾箱的问题、乱码问题、html邮件、文本邮件、选.NET自带 Or 使用邮件群发组件? 等等）。 <img src ="http://www.cppblog.com/izualzhy/aggbug/177954.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/izualzhy/" target="_blank">izualzhy</a> 2012-06-07 18:34 <a href="http://www.cppblog.com/izualzhy/archive/2012/06/07/177954.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ubuntu下修改ls的颜色</title><link>http://www.cppblog.com/izualzhy/archive/2012/05/24/176057.html</link><dc:creator>izualzhy</dc:creator><author>izualzhy</author><pubDate>Thu, 24 May 2012 13:20:00 GMT</pubDate><guid>http://www.cppblog.com/izualzhy/archive/2012/05/24/176057.html</guid><wfw:comment>http://www.cppblog.com/izualzhy/comments/176057.html</wfw:comment><comments>http://www.cppblog.com/izualzhy/archive/2012/05/24/176057.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/izualzhy/comments/commentRss/176057.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/izualzhy/services/trackbacks/176057.html</trackback:ping><description><![CDATA[<p>在win下安装了ubuntu的虚拟机，共享了几个文件夹，可ls一看颜色太难受了，绿色的底框，蓝色的字。</p> <p>于是查找了下怎么修改默认的颜色，我们知道颜色代表者类型，比如蓝色是文件夹，绿色是二进制可执行文件，青色是链接。</p> <p>绿色的底框表示others同样具有写的权限？（好像是，不是很明确）</p> <p>方法很简单：</p> <p>1.cd</p> <p>2.dircolors –p &gt; .dircolors</p> <p>3.vim .dircolors</p> <p>进入该文件修改：</p> <p>&nbsp;</p> <p>&nbsp;</p> <p># Below are the color init strings for the basic file types. A color init<br># string consists of one or more of the following numeric codes:<br># Attribute codes:<br># 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed<br># Text color codes:<br># 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white<br># Background color codes:<br># 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white</p> <p>根据该提示</p> <p>修改下 OTHER_WRITABLE 后面的数字即可</p> <p>4.source .dircolors</p> <p>OK啦！</p> <p>从网上查到的资料，有的linux系统需要编辑/etc/DIR_COLORS文件。</p><img src ="http://www.cppblog.com/izualzhy/aggbug/176057.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/izualzhy/" target="_blank">izualzhy</a> 2012-05-24 21:20 <a href="http://www.cppblog.com/izualzhy/archive/2012/05/24/176057.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>周末的吐槽</title><link>http://www.cppblog.com/izualzhy/archive/2012/05/20/175434.html</link><dc:creator>izualzhy</dc:creator><author>izualzhy</author><pubDate>Sun, 20 May 2012 02:32:00 GMT</pubDate><guid>http://www.cppblog.com/izualzhy/archive/2012/05/20/175434.html</guid><wfw:comment>http://www.cppblog.com/izualzhy/comments/175434.html</wfw:comment><comments>http://www.cppblog.com/izualzhy/archive/2012/05/20/175434.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/izualzhy/comments/commentRss/175434.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/izualzhy/services/trackbacks/175434.html</trackback:ping><description><![CDATA[<p>习惯在每个周末晚睡，凌晨听到外面疾风骤雨，雷声滚滚，打开窗子，清新的空气涌入，感觉自己混沌的世界顿时敞亮了些。</p> <p>于是缓缓的睡去，早上半睡半醒间似乎还能感受到比平时要惬意轻松了许多。因为开着窗子的缘故，外面铿锵有力抑扬顿挫的吆喝声和喧闹的鸣笛声，自行车哐啷哐啷的颠簸声，一阵一阵的传入耳中，于是不得不关了窗户，隔绝了外面的喧嚣，再次回归到自己的世界里。</p> <p>竟然梦到了自己一直调试的问题，梦里依旧找不到那种梦想中的行云流水般解决问题的乐趣。从毕业时就被灌输奋斗与吃苦的观念，于是默然对自己现在的生活选择了忍耐。然而内心知道，自己并非那种要创一番事业的人。最想的还是找所高校，当一个研究员，醉心于问题本身而非解决问题，痴迷于创造理论而非方法。不过生活总是不能任由你自己去选择的，不是么？虽然有时候看似选择很多，可如同《悟空传》里说的：是不是无论选择哪一个方向，都将游向同一个地方？无论内心如何挣扎与警戒，不断的提醒与鞭策，总是不可思议的变化，变成自己曾经最讨厌的那类人，世俗厚脸皮，计较逃避责任，任性而妄为。</p> <p>早上起床，收拾了下屋子，狭小的屋子，东西被我从东挪到了西，从西又挪回东，不断的寻找自己看来符合审美的布局，有种强迫症的滋味。不知道如果不在帝都，是否所想所做就可以变成了打理自己的屋子。在帝都生活了这几年，我已不知道答案，不过看别的城市的朋友，似乎是是的。</p> <p>一直不太明白为什么要这么生活下去，跟朋友交谈似乎大家也都有同样的困惑，同样没有答案，即使是离开，也充满了逃避的意味，并不是有着如同海上灯塔的指引。自己的价值观慢慢的遭到侵蚀，却又没有更好的办法，没有信仰与偏激执拗的信仰同样可怕，不满于现状却又找不到解决的办法，做着同样的事情却又希望自己能够与众不同，明明是个屌丝却幻想有朝一日逆袭干掉高富帅，真是一个奇怪的人啊。</p> <p>有时候真的觉得在学校呆的太久，以至于现在面对现实竟有这么多乱七八糟的困惑。只是想知道在这个浮躁的社会里，如果我甘愿做个小人物，简单生活，无甚大理想，却又小计较，略通人情世故，不喜拍马溜须，喜欢工作，却也热爱生活，无聊时约三两好友共把盏，相谈欢，日出而作，日落而息，在外长喧嚣，自心乐静谧，可否在这个时代，春暖花开？</p><img src ="http://www.cppblog.com/izualzhy/aggbug/175434.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/izualzhy/" target="_blank">izualzhy</a> 2012-05-20 10:32 <a href="http://www.cppblog.com/izualzhy/archive/2012/05/20/175434.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]写的不错的一篇文章</title><link>http://www.cppblog.com/izualzhy/archive/2012/04/09/170652.html</link><dc:creator>izualzhy</dc:creator><author>izualzhy</author><pubDate>Mon, 09 Apr 2012 12:16:00 GMT</pubDate><guid>http://www.cppblog.com/izualzhy/archive/2012/04/09/170652.html</guid><wfw:comment>http://www.cppblog.com/izualzhy/comments/170652.html</wfw:comment><comments>http://www.cppblog.com/izualzhy/archive/2012/04/09/170652.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/izualzhy/comments/commentRss/170652.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/izualzhy/services/trackbacks/170652.html</trackback:ping><description><![CDATA[<p>&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; 你说，后来 <p>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ——湖心娉婷 <p>你说帘外海棠，锦屏鸳鸯；后来庭院春深，咫尺画堂。<br>你说笛声如诉，费尽思量；后来茶烟尚绿，人影茫茫。<br>你说可人如玉，与子偕臧；后来长亭远望，夜色微凉。<br>你说霞染天光，陌上花开与谁享；后来烟笼柳暗，湖心水动影无双。<br>你说彼岸灯火，心之所向；后来渔舟晚唱，烟雨彷徨。<br>你说水静莲香，惠风和畅；后来云遮薄月，清露如霜。<br>你说幽窗棋罢，再吐衷肠；后来风卷孤松，雾漫山冈。<br>你说红袖佯嗔，秋波流转思张敞；后来黛眉长敛，春色飘零别阮郎。<br>你说暗香浮动，刹那光芒；后来玉殒琼碎，疏影横窗。<br>你说良辰美景，乘兴独往；后来红尘紫陌，雪落太行。<br>你说赋尽高唐，三生石上；后来君居淄右，妾家河阳。<br>你说玉楼朱颜，飞月流觞迎客棹；后来幽谷居士，枕琴听雨卧禅房。<br>你说高山流水，客答春江，后来章台游冶，系马垂杨。<br>你说锦瑟韶光，华灯幢幢；后来荼靡开至，青苔满墙。<br>你说天地玄黄，风月琳琅；后来月斜江上，云淡天长。<br>你说兰舟轻发，西楼月下忆姣娘；后来江湖两忘，只影天涯踏秋殇。<br>你说幽谷听溪，寻芳清岗，后来落花丁零，水涸潇湘。<br>你说霜冷长河，蒹葭苍苍，后来伊人何在？孤坐未央。<br>你说月洒寒江，玉柱琼梁，后来冷镜残钩，三更榻凉。<br>你说梦呓故园，桃花水里游鸳鸯；后来千山暮雪，老翅几回自奔忙</p><img src ="http://www.cppblog.com/izualzhy/aggbug/170652.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/izualzhy/" target="_blank">izualzhy</a> 2012-04-09 20:16 <a href="http://www.cppblog.com/izualzhy/archive/2012/04/09/170652.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>叶芝《当你老了》</title><link>http://www.cppblog.com/izualzhy/archive/2012/03/20/168396.html</link><dc:creator>izualzhy</dc:creator><author>izualzhy</author><pubDate>Tue, 20 Mar 2012 06:45:00 GMT</pubDate><guid>http://www.cppblog.com/izualzhy/archive/2012/03/20/168396.html</guid><wfw:comment>http://www.cppblog.com/izualzhy/comments/168396.html</wfw:comment><comments>http://www.cppblog.com/izualzhy/archive/2012/03/20/168396.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/izualzhy/comments/commentRss/168396.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/izualzhy/services/trackbacks/168396.html</trackback:ping><description><![CDATA[<p style="font-family: Simsun; line-height: normal; background-color: #ffffff; ">爱尔兰 叶芝</p><p style="font-family: Simsun; line-height: normal; background-color: #ffffff; "><br />When You Are Old</p><p style="font-family: Simsun; line-height: normal; background-color: #ffffff; ">When you are old and gray and full of sleep<br />And nodding by the fire,take down this book,&nbsp;<br />And slowly read,and dream of the soft look&nbsp;<br />Your eyes had once,and of their shadows deep;&nbsp;<br />How many loved your moments of glad grace,&nbsp;<br />And loved your beauty with love false or true;&nbsp;<br />But one man loved the pilgrim soul in you,&nbsp;<br />And loved the sorrows of your changing face;&nbsp;<br />And bending down beside the glowing bars,&nbsp;<br />Murmur,a little sadly,how love fled&nbsp;<br />And paced upon the mountains overhead,&nbsp;<br />And hid his face amid a crowd of stars.</p><p style="font-family: Simsun; line-height: normal; background-color: #ffffff; "><br />　　当年华已逝&nbsp;<br />　　　　&nbsp;<br />　　　　 LOVER译&nbsp;<br />　　　　&nbsp;<br />　　　　当年华已逝，你两鬓斑白，沉沉欲睡，&nbsp;<br />　　　　坐在炉边慢慢打盹，请取下我的这本诗集，&nbsp;<br />　　　　请缓缓读起，如梦一般，你会重温&nbsp;<br />　　　　你那脉脉眼波，她们是曾经那么的深情和柔美。&nbsp;<br />　　　　&nbsp;<br />　　　　多少人曾爱过你容光焕发的楚楚魅力，&nbsp;<br />　　　　爱你的倾城容颜，或是真心，或是做戏，&nbsp;<br />　　　　但只有一个人！他爱的是你圣洁虔诚的心！&nbsp;<br />　　　　当你洗尽铅华，伤逝红颜的老去，他也依然深爱着你！&nbsp;<br />　　　　&nbsp;<br />　　　　炉里的火焰温暖明亮，你轻轻低下头去，&nbsp;<br />　　　　带着淡淡的凄然，为了枯萎熄灭的爱情，喃喃低语，&nbsp;<br />　　　　此时他正在千山万壑之间独自游荡，&nbsp;<br />　　　　在那满天凝视你的繁星后面隐起了脸庞。&nbsp;<br />　　</p><p style="font-family: Simsun; line-height: normal; background-color: #ffffff; ">　　当你老了&nbsp;<br />　　　　&nbsp;<br />　　　　袁可嘉译&nbsp;<br />　　　　&nbsp;<br />　　　　当你老了，头白了，睡意昏沉，&nbsp;<br />　　　　炉火旁打盹，请取下这部诗歌，&nbsp;<br />　　　　慢慢读，回想你过去眼神的柔和，&nbsp;<br />　　　　回想它们昔日浓重的阴影；&nbsp;<br />　　　　&nbsp;<br />　　　　多少人爱你青春欢畅的时辰，&nbsp;<br />　　　　爱慕你的美丽，假意或真心，&nbsp;<br />　　　　只有一个人爱你那朝圣者的灵魂，&nbsp;<br />　　　　爱你衰老了的脸上痛苦的皱纹；&nbsp;<br />　　　　&nbsp;<br />　　　　垂下头来，在红光闪耀的炉子旁，&nbsp;<br />　　　　凄然地轻轻诉说那爱情的消逝，&nbsp;<br />　　　　在头顶的山上它缓缓踱着步子，&nbsp;<br />　　　　在一群星星中间隐藏着脸庞。&nbsp;<br />　　　　 &#9472;&#9472;1893&nbsp;<br />　　</p><p style="font-family: Simsun; line-height: normal; background-color: #ffffff; ">　　当你老了&nbsp;<br />　　　　&nbsp;<br />　　　　裘小龙译&nbsp;<br />　　　　&nbsp;<br />　　　　当你老了，头发灰白，满是睡意，&nbsp;<br />　　　　在炉火旁打盹，取下这一册书本，&nbsp;<br />　　　　缓缓地读，梦到你的眼睛曾经&nbsp;<br />　　　　有的那种柔情，和它们的深深影子；&nbsp;<br />　　　　&nbsp;<br />　　　　多少人爱你欢乐美好的时光，&nbsp;<br />　　　　爱你的美貌，用或真或假的爱情，&nbsp;<br />　　　　但有一个人爱你那朝圣者的灵魂，&nbsp;<br />　　　　也爱你那衰老了的脸上的哀伤；&nbsp;<br />　　　　&nbsp;<br />　　　　在燃烧的火炉旁边俯下身，&nbsp;<br />　　　　凄然地喃喃说，爱怎样离去了，&nbsp;<br />　　　　在头上的山峦中间独步踽踽，&nbsp;<br />　　　　把他的脸埋藏在一群星星中。&nbsp;<br />　　</p><p style="font-family: Simsun; line-height: normal; background-color: #ffffff; ">　　当你老了&nbsp;<br />　　　　&nbsp;<br />　　　　杨牧译&nbsp;<br />　　　　&nbsp;<br />　　　　当你老了，灰黯，沉沉欲眠，&nbsp;<br />　　　　在火炉边瞌睡，取下这本书，&nbsp;<br />　　　　慢慢读，梦回你眼睛曾经&nbsp;<br />　　　　有过的柔光，以及那深深波影；&nbsp;<br />　　　　&nbsp;<br />　　　　多少人恋爱你喜悦雍容的时刻，&nbsp;<br />　　　　恋爱你的美以真以假的爱情，&nbsp;<br />　　　　有一个人爱你朝山的灵魂内心，&nbsp;<br />　　　　爱你变化的面容有那些怔忡错愕。&nbsp;<br />　　　　&nbsp;<br />　　　　并且俯身闪烁发光的铁栏杆边，&nbsp;<br />　　　　嚅嗫，带些许忧伤，爱如何竟已&nbsp;<br />　　　　逸去了并且在头顶的高山踱蹀&nbsp;<br />　　　　复将他的脸藏在一群星星中间。<br />　　</p><p style="font-family: Simsun; line-height: normal; background-color: #ffffff; ">　　当你年老时&nbsp;<br />　　　　&nbsp;<br />　　　　傅浩译&nbsp;<br />　　　　&nbsp;<br />　　　　当你年老，鬓斑，睡意昏沉，&nbsp;<br />　　　　在炉旁打盹时，取下这本书，&nbsp;<br />　　　　慢慢诵读，梦忆从前你双眸&nbsp;<br />　　　　神色柔和，眼波中倒影深深；&nbsp;<br />　　　　&nbsp;<br />　　　　多少人爱你风韵妩媚的时光，&nbsp;<br />　　　　爱你的美丽出自假意或真情，&nbsp;<br />　　　　但唯有一人爱你灵魂的至诚，&nbsp;<br />　　　　爱你渐衰的脸上愁苦的风霜；&nbsp;<br />　　　　&nbsp;<br />　　　　弯下身子，在炽红的壁炉边，&nbsp;<br />　　　　忧伤地低诉，爱神如何逃走，&nbsp;<br />　　　　在头顶上的群山巅漫步闲游，&nbsp;<br />　　　　把他的面孔隐没在繁星中间。&nbsp;<br />　　</p><p style="font-family: Simsun; line-height: normal; background-color: #ffffff; ">　　当你老了&nbsp;<br />　　　　&nbsp;<br />　　　　飞白译&nbsp;<br />　　　　&nbsp;<br />　　　　当你老了，白发苍苍，睡意朦胧，&nbsp;<br />　　　　在炉前打盹，请取下这本诗篇，&nbsp;<br />　　　　慢慢吟诵，梦见你当年的双眼&nbsp;<br />　　　　那柔美的光芒与青幽的晕影；&nbsp;<br />　　　　&nbsp;<br />　　　　多少人真情假意，爱过你的美丽，&nbsp;<br />　　　　爱过你欢乐而迷人的青春，&nbsp;<br />　　　　唯独一人爱你朝圣者的心，&nbsp;<br />　　　　爱你日益凋谢的脸上的衰戚；&nbsp;<br />　　　　&nbsp;<br />　　　　当你佝偻着，在灼热的炉栅边，&nbsp;<br />　　　　你将轻轻诉说，带着一丝伤感：&nbsp;<br />　　　　逝去的爱，如今已步上高山，&nbsp;<br />　　　　在密密星群里埋藏它的赧颜。</p><img src ="http://www.cppblog.com/izualzhy/aggbug/168396.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/izualzhy/" target="_blank">izualzhy</a> 2012-03-20 14:45 <a href="http://www.cppblog.com/izualzhy/archive/2012/03/20/168396.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>杂记二重构</title><link>http://www.cppblog.com/izualzhy/archive/2012/03/13/167807.html</link><dc:creator>izualzhy</dc:creator><author>izualzhy</author><pubDate>Tue, 13 Mar 2012 11:59:00 GMT</pubDate><guid>http://www.cppblog.com/izualzhy/archive/2012/03/13/167807.html</guid><wfw:comment>http://www.cppblog.com/izualzhy/comments/167807.html</wfw:comment><comments>http://www.cppblog.com/izualzhy/archive/2012/03/13/167807.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/izualzhy/comments/commentRss/167807.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/izualzhy/services/trackbacks/167807.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;重构GUI，糊涂了一段时间后终于大概明白自己在做一件什么样的事情了。<br />之前从书上网上看过一些人重构代码的经历，如何继承啊，模式啊什么的，于是俺也雄心勃勃外加完全不懂得思考怎么样重构该GUI框架，结果完全弄错了有木有。。。<br />做过一次才知道，为什么有人之前告诫说重构一定要小心，刚开始时信心满满的做，后来越做越灰心，最后看着自己重构的代码，无地自容啊。<br />不过这次我是开始就给搞错了，这次重构主要是<br />1从内部去掉冗余代码<br />2访问控制符要慎重选择<br />3流程要清晰，十分清晰<br /><br />其中3搞定了，1,2应该都不是问题，看着如此残忍的代码之间的来回调用，复杂的变量互相赋值。。。。信心不太足啊！<br />来到新公司的第一个任务，我是笨还是聪明，是自信还是自卑，看着别人信手拈来的轻松工作方式，我咋这么差劲捏。<img src ="http://www.cppblog.com/izualzhy/aggbug/167807.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/izualzhy/" target="_blank">izualzhy</a> 2012-03-13 19:59 <a href="http://www.cppblog.com/izualzhy/archive/2012/03/13/167807.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>杂记</title><link>http://www.cppblog.com/izualzhy/archive/2012/03/11/167680.html</link><dc:creator>izualzhy</dc:creator><author>izualzhy</author><pubDate>Sun, 11 Mar 2012 15:36:00 GMT</pubDate><guid>http://www.cppblog.com/izualzhy/archive/2012/03/11/167680.html</guid><wfw:comment>http://www.cppblog.com/izualzhy/comments/167680.html</wfw:comment><comments>http://www.cppblog.com/izualzhy/archive/2012/03/11/167680.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/izualzhy/comments/commentRss/167680.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/izualzhy/services/trackbacks/167680.html</trackback:ping><description><![CDATA[忙碌间在新公司已经度过了一周的时间，很多时候选择就这么做了下来，没人会告诉我是对是错，也没人知道。在找了一段时间工作后，我告诉自己，就是这里了，签合同，学习，工作。<br />大部分时候我都相信，人最难看清的是自己，对于自己的爱好，兴趣，喜恶，我其实并没有十足的把握。关于未来，我也不再相信与执着，没有了学生时代对于理想啊，付出啊，收获啊那种纯真的纯粹的简单而又直接的答案。从前我一直觉得有句话很有道理，xx不一定oo，但不xx一定不oo，xxoo可以用变量替换，相信可以得到很多组句子，很多人也会说。而现在，我并没有觉得这话错了，正如很多选择不知对错一样，对于这句话，不想多去思考正确与否了。<br />然而不同的是，我不再相信。<br />总觉得自己现在的工作或者说学习上的状态，简单来讲可以用4个字形容：<br />拒绝思考。<br />有了答案却让你更加茫然，得到需要的却让你更加空虚，如果有的问题都不知道是什么，何处去寻找答案。<br />以上的语句好2，甚至不知所云。。。或许就是我现在总觉得自己思考就是在搅浆糊的那种感觉的真是写照。<br />我相信自己在处理生活上不是一般的糟糕，一个习惯发呆的人总是容易忽略很多生活的内容，少了很多生活的乐趣。我梦想自己开始逐渐不被生活所左右，至少不会如此严重的左右，那时我逐渐明白自己想要一颗强大的内心。我为自己想通了这些十分高兴，后来发现自己所谓的这个想通，不过是将自己的心灵关起来而已。有时候想来想去很累，想的结果也有对有错，但我告诉自己别那么在乎对错，对错也不是那么重要，只是在这忙碌的生活里，不要拒绝去想，拒绝思考。<img src ="http://www.cppblog.com/izualzhy/aggbug/167680.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/izualzhy/" target="_blank">izualzhy</a> 2012-03-11 23:36 <a href="http://www.cppblog.com/izualzhy/archive/2012/03/11/167680.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>程序员的自我修养学习笔记之物理地址和虚拟地址</title><link>http://www.cppblog.com/izualzhy/archive/2011/08/31/154829.html</link><dc:creator>izualzhy</dc:creator><author>izualzhy</author><pubDate>Wed, 31 Aug 2011 15:19:00 GMT</pubDate><guid>http://www.cppblog.com/izualzhy/archive/2011/08/31/154829.html</guid><wfw:comment>http://www.cppblog.com/izualzhy/comments/154829.html</wfw:comment><comments>http://www.cppblog.com/izualzhy/archive/2011/08/31/154829.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/izualzhy/comments/commentRss/154829.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/izualzhy/services/trackbacks/154829.html</trackback:ping><description><![CDATA[<p>所谓的<span style="color: red">地址空间</span>是个比较抽象的概念，你可以把它想象成一个很大的数组，每个数组的元素是一个字节，而这个数组大小由地址空间的地址长度决定，比如32位的地址空间的大小为2^32=4294967296字节，即4GB，地址空间有效的地址是0~4294967295,用十六进制表示就是0x00000000~0xFFFFFFFF(<span style="color: red">I</span>)。地址空间分两种：虚拟地址空间(Virtual Address Space)和物理地址空间(Physical Address Space)。物理地址空间是实实在在存在的，存在于计算机中，而且对于每一台计算机来说只是惟一的一个，你可以把物理空间想象成物理内存，比如你的计算机用的是Inter的Pentium4的处理器，那么它是32位的机器，即计算机地址线有32条（实际上是36条地址线，不够我们暂时认为它只是32条），那么物理空间就有4GB(物理寻址能力是2^32)。但是你的计算机上只装了512MB的内存，那么其实物理地址的真正有效部分只有0x00000000~0x1FFFFFF(<span style="color: red">II</span>.),其他部分都是无效的（实际上还有一些外部I/O设备映射到物理空间的，也是有效的，但我们暂时无视其存在）。虚拟地址空间是指虚拟的、人们想象出来的地址空间，其实它并不存在，每个进程都有自己独立的虚拟空间，而且每个进程只能访问自己的地址控件，这样就有效的做到了进程的隔离。</p>
<p><span style="color: red">I</span>.2^32-1=2^0+2^1+2^2+...+2^31=(2^0+2^1+2^2+2^3)*(2^0+2^4+2^8+2^12+2^16+2^20+2^24+2^28)=F*(2^0+2^4+2^8+2^12+2^16+2^20+2^24+2^28)=0xFFFFFFFF<br /><span style="color: red">II</span>.1k=2^10bytes,1M=2^10M=2^20bytes,1G=2^10M=2^30bytes,.16进制的第六位,也就是2^20，就表示M了，例如1FFFFFF,就表示1M大小，FFFFFF就表示15M，FFFFFFF表示255M，0xA000000=10M,0x6400000=100M,类推，1FFFFFFF就表示(2^8+F*2^4+F)=511M？<br /></p><img src ="http://www.cppblog.com/izualzhy/aggbug/154829.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/izualzhy/" target="_blank">izualzhy</a> 2011-08-31 23:19 <a href="http://www.cppblog.com/izualzhy/archive/2011/08/31/154829.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]字符编码笔记：ASCII，Unicode和UTF-8</title><link>http://www.cppblog.com/izualzhy/archive/2011/08/30/154732.html</link><dc:creator>izualzhy</dc:creator><author>izualzhy</author><pubDate>Tue, 30 Aug 2011 14:27:00 GMT</pubDate><guid>http://www.cppblog.com/izualzhy/archive/2011/08/30/154732.html</guid><wfw:comment>http://www.cppblog.com/izualzhy/comments/154732.html</wfw:comment><comments>http://www.cppblog.com/izualzhy/archive/2011/08/30/154732.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/izualzhy/comments/commentRss/154732.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/izualzhy/services/trackbacks/154732.html</trackback:ping><description><![CDATA[<div class="asset-meta">
<p class="vcard author">作者： <a class="fn url" href="http://www.ruanyifeng.com/">阮一峰</a></p>
<p>日期： <a href="http://www.ruanyifeng.com/blog/2007/10/"><abbr class="published" title="2007-10-28T22:29:57+08:00">2007年10月28日</abbr></a></p></div>
<div id="main-content" class="asset-content entry-content">
<div class="asset-body">
<p>今天中午，我突然想搞清楚Unicode和UTF-8之间的关系，于是就开始在网上查资料。</p></div>
<div id="more" class="asset-more">
<p>结果，这个问题比我想象的复杂，从午饭后一直看到晚上9点，才算初步搞清楚。</p>
<p>下面就是我的笔记，主要用来整理自己的思路。但是，我尽量试图写得通俗易懂，希望能对其他朋友有用。毕竟，字符编码是计算机技术的基石，想要熟练使用计算机，就必须懂得一点字符编码的知识。</p>
<p><strong>1. ASCII码</strong></p>
<p>我们知道，在计算机内部，所有的信息最终都表示为一个二进制的字符串。每一个二进制位（bit）有0和1两种状态，因此八个二进制位就可以组合出256种状态，这被称为一个字节（byte）。也就是说，一个字节一共可以用来表示256种不同的状态，每一个状态对应一个符号，就是256个符号，从0000000到11111111。</p>
<p>上个世纪60年代，美国制定了一套字符编码，对英语字符与二进制位之间的关系，做了统一规定。这被称为ASCII码，一直沿用至今。</p>
<p>ASCII码一共规定了128个字符的编码，比如空格&#8220;SPACE&#8221;是32（二进制00100000），大写的字母A是65（二进制01000001）。这128个符号（包括32个不能打印出来的控制符号），只占用了一个字节的后面7位，最前面的1位统一规定为0。</p>
<p><strong>2、非ASCII编码</strong></p>
<p>英语用128个符号编码就够了，但是用来表示其他语言，128个符号是不够的。比如，在法语中，字母上方有注音符号，它就无法用ASCII码表示。于是，一些欧洲国家就决定，利用字节中闲置的最高位编入新的符号。比如，法语中的&#233;的编码为130（二进制10000010）。这样一来，这些欧洲国家使用的编码体系，可以表示最多256个符号。</p>
<p>但是，这里又出现了新的问题。不同的国家有不同的字母，因此，哪怕它们都使用256个符号的编码方式，代表的字母却不一样。比如，130在法语编码中代表了&#233;，在希伯来语编码中却代表了字母Gimel (ג)，在俄语编码中又会代表另一个符号。但是不管怎样，所有这些编码方式中，0&#8212;127表示的符号是一样的，不一样的只是128&#8212;255的这一段。</p>
<p>至于亚洲国家的文字，使用的符号就更多了，汉字就多达10万左右。一个字节只能表示256种符号，肯定是不够的，就必须使用多个字节表达一个符号。比如，简体中文常见的编码方式是GB2312，使用两个字节表示一个汉字，所以理论上最多可以表示256x256=65536个符号。</p>
<p>中文编码的问题需要专文讨论，这篇笔记不涉及。这里只指出，虽然都是用多个字节表示一个符号，但是GB类的汉字编码与后文的Unicode和UTF-8是毫无关系的。</p>
<p><strong>3.Unicode</strong></p>
<p>正如上一节所说，世界上存在着多种编码方式，同一个二进制数字可以被解释成不同的符号。因此，要想打开一个文本文件，就必须知道它的编码方式，否则用错误的编码方式解读，就会出现乱码。为什么电子邮件常常出现乱码？就是因为发信人和收信人使用的编码方式不一样。</p>
<p>可以想象，如果有一种编码，将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码，那么乱码问题就会消失。这就是Unicode，就像它的名字都表示的，这是一种所有符号的编码。</p>
<p>Unicode当然是一个很大的集合，现在的规模可以容纳100多万个符号。每个符号的编码都不一样，比如，U+0639表示阿拉伯字母Ain，U+0041表示英语的大写字母A，U+4E25表示汉字&#8220;严&#8221;。具体的符号对应表，可以查询<a href="http://www.unicode.org/" target="_blank">unicode.org</a>，或者专门的<a href="http://www.chi2ko.com/tool/CJK.htm" target="_blank">汉字对应表</a>。 </p>
<p><strong>4. Unicode的问题</strong></p>
<p>需要注意的是，Unicode只是一个符号集，它只规定了符号的二进制代码，却没有规定这个二进制代码应该如何存储。</p>
<p>比如，汉字&#8220;严&#8221;的unicode是十六进制数4E25，转换成二进制数足足有15位（100111000100101），也就是说这个符号的表示至少需要2个字节。表示其他更大的符号，可能需要3个字节或者4个字节，甚至更多。</p>
<p>这里就有两个严重的问题，第一个问题是，如何才能区别unicode和ascii？计算机怎么知道三个字节表示一个符号，而不是分别表示三个符号呢？第二个问题是，我们已经知道，英文字母只用一个字节表示就够了，如果unicode统一规定，每个符号用三个或四个字节表示，那么每个英文字母前都必然有二到三个字节是0，这对于存储来说是极大的浪费，文本文件的大小会因此大出二三倍，这是无法接受的。</p>
<p>它们造成的结果是：1）出现了unicode的多种存储方式，也就是说有许多种不同的二进制格式，可以用来表示unicode。2）unicode在很长一段时间内无法推广，直到互联网的出现。</p>
<p><strong>5.UTF-8</strong></p>
<p>互联网的普及，强烈要求出现一种统一的编码方式。UTF-8就是在互联网上使用最广的一种unicode的实现方式。其他实现方式还包括UTF-16和UTF-32，不过在互联网上基本不用。<strong>重复一遍，这里的关系是，UTF-8是Unicode的实现方式之一。</strong></p>
<p>UTF-8最大的一个特点，就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号，根据不同的符号而变化字节长度。</p>
<p>UTF-8的编码规则很简单，只有二条：</p>
<p>1）对于单字节的符号，字节的第一位设为0，后面7位为这个符号的unicode码。因此对于英语字母，UTF-8编码和ASCII码是相同的。</p>
<p>2）对于n字节的符号（n&gt;1），第一个字节的前n位都设为1，第n+1位设为0，后面字节的前两位一律设为10。剩下的没有提及的二进制位，全部为这个符号的unicode码。</p>
<p>下表总结了编码规则，字母x表示可用编码的位。</p>
<blockquote>
<div>
<p>Unicode符号范围 | UTF-8编码方式<br />(十六进制) | （二进制）<br />--------------------+---------------------------------------------<br />0000 0000-0000 007F | 0xxxxxxx<br />0000 0080-0000 07FF | 110xxxxx 10xxxxxx<br />0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx<br />0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx</p></div></blockquote>
<p>下面，还是以汉字&#8220;严&#8221;为例，演示如何实现UTF-8编码。</p>
<p>已知&#8220;严&#8221;的unicode是4E25（100111000100101），根据上表，可以发现4E25处在第三行的范围内（0000 0800-0000 FFFF），因此&#8220;严&#8221;的UTF-8编码需要三个字节，即格式是&#8220;1110xxxx 10xxxxxx 10xxxxxx&#8221;。然后，从&#8220;严&#8221;的最后一个二进制位开始，依次从后向前填入格式中的x，多出的位补0。这样就得到了，&#8220;严&#8221;的UTF-8编码是&#8220;11100100 10111000 10100101&#8221;，转换成十六进制就是E4B8A5。</p>
<p><strong>6. Unicode与UTF-8之间的转换</strong></p>
<p>通过上一节的例子，可以看到&#8220;严&#8221;的Unicode码是4E25，UTF-8编码是E4B8A5，两者是不一样的。它们之间的转换可以通过程序实现。</p>
<p>在Windows平台下，有一个最简单的转化方法，就是使用内置的记事本小程序Notepad.exe。打开文件后，点击&#8220;文件&#8221;菜单中的&#8220;另存为&#8221;命令，会跳出一个对话框，在最底部有一个&#8220;编码&#8221;的下拉条。</p>
<p><a href="http://www.ruanyifeng.com/blog/2007/10/bg2007102801.jpg" target="_blank"><img alt="bg2007102801.jpg" src="file:///F:/字符编码笔记：ASCII，Unicode和UTF-8%20-%20阮一峰的网络日志_files/bg2007102801-thumb.jpg" width="500" height="227" /></a></p>
<p>里面有四个选项：ANSI，Unicode，Unicode big endian 和 UTF-8。</p>
<p>1）ANSI是默认的编码方式。对于英文文件是ASCII编码，对于简体中文文件是GB2312编码（只针对Windows简体中文版，如果是繁体中文版会采用Big5码）。</p>
<p>2）Unicode编码指的是UCS-2编码方式，即直接用两个字节存入字符的Unicode码。这个选项用的little endian格式。</p>
<p>3）Unicode big endian编码与上一个选项相对应。我在下一节会解释little endian和big endian的涵义。</p>
<p>4）UTF-8编码，也就是上一节谈到的编码方法。</p>
<p>选择完&#8221;编码方式&#8220;后，点击&#8221;保存&#8220;按钮，文件的编码方式就立刻转换好了。</p>
<p><strong>7. Little endian和Big endian</strong></p>
<p>上一节已经提到，Unicode码可以采用UCS-2格式直接存储。以汉字&#8221;严&#8220;为例，Unicode码是4E25，需要用两个字节存储，一个字节是4E，另一个字节是25。存储的时候，4E在前，25在后，就是Big endian方式；25在前，4E在后，就是Little endian方式。</p>
<p>这两个古怪的名称来自英国作家斯威夫特的《格列佛游记》。在该书中，小人国里爆发了内战，战争起因是人们争论，吃鸡蛋时究竟是从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开。为了这件事情，前后爆发了六次战争，一个皇帝送了命，另一个皇帝丢了王位。</p>
<p>因此，第一个字节在前，就是&#8221;大头方式&#8220;（Big endian），第二个字节在前就是&#8221;小头方式&#8220;（Little endian）。</p>
<p>那么很自然的，就会出现一个问题：计算机怎么知道某一个文件到底采用哪一种方式编码？</p>
<p>Unicode规范中定义，每一个文件的最前面分别加入一个表示编码顺序的字符，这个字符的名字叫做&#8221;零宽度非换行空格&#8220;（ZERO WIDTH NO-BREAK SPACE），用FEFF表示。这正好是两个字节，而且FF比FE大1。</p>
<p>如果一个文本文件的头两个字节是FE FF，就表示该文件采用大头方式；如果头两个字节是FF FE，就表示该文件采用小头方式。</p>
<p><strong>8. 实例</strong></p>
<p>下面，举一个实例。</p>
<p>打开&#8221;记事本&#8220;程序Notepad.exe，新建一个文本文件，内容就是一个&#8221;严&#8220;字，依次采用ANSI，Unicode，Unicode big endian 和 UTF-8编码方式保存。</p>
<p>然后，用文本编辑软件<a href="http://www.google.cn/search?aq=t&amp;oq=UltraEdit&amp;complete=1&amp;hl=zh-CN&amp;newwindow=1&amp;rlz=1B3GGGL_zh-CNCN216CN216&amp;q=ultraedit+%E4%B8%8B%E8%BD%BD&amp;btnG=Google+%E6%90%9C%E7%B4%A2&amp;meta=" target="_blank">UltraEdit中</a>的&#8221;十六进制功能&#8220;，观察该文件的内部编码方式。</p>
<p>1）ANSI：文件的编码就是两个字节&#8220;D1 CF&#8221;，这正是&#8220;严&#8221;的GB2312编码，这也暗示GB2312是采用大头方式存储的。</p>
<p>2）Unicode：编码是四个字节&#8220;FF FE 25 4E&#8221;，其中&#8220;FF FE&#8221;表明是小头方式存储，真正的编码是4E25。</p>
<p>3）Unicode big endian：编码是四个字节&#8220;FE FF 4E 25&#8221;，其中&#8220;FE FF&#8221;表明是大头方式存储。</p>
<p>4）UTF-8：编码是六个字节&#8220;EF BB BF E4 B8 A5&#8221;，前三个字节&#8220;EF BB BF&#8221;表示这是UTF-8编码，后三个&#8220;E4B8A5&#8221;就是&#8220;严&#8221;的具体编码，它的存储顺序与编码顺序是一致的。</p>
<p><strong>9. 延伸阅读</strong></p>
<p>* <a href="http://www.joelonsoftware.com/articles/Unicode.html" target="_blank">The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets</a>（关于字符集的最基本知识）</p>
<p>* <a href="http://www.pconline.com.cn/pcedu/empolder/gj/other/0505/616631.html" target="_blank">谈谈Unicode编码</a></p>
<p>* <a href="http://www.ietf.org/rfc/rfc3629.txt" target="_blank">RFC3629：UTF-8, a transformation format of ISO 10646</a>（如果实现UTF-8的规定）</p>
<p>（完）</p></div></div><script type="text/javascript" src="字符编码笔记：ASCII，Unicode和UTF-8%20-%20阮一峰的网络日志_files/newwindow.js"></script>
<div class="asset-footer">
<h3>文档信息</h3>
<ul><li>版权声明：自由转载-非商用-非衍生-保持署名 | <a href="http://creativecommons.org/licenses/by-nc-nd/3.0/deed.zh">Creative Commons BY-NC-ND 3.0</a></li><li>原文网址：<a href="http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html">http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html</a></li><li>最后修改时间：2007年10月29日 09:46 </li></ul></div><img src ="http://www.cppblog.com/izualzhy/aggbug/154732.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/izualzhy/" target="_blank">izualzhy</a> 2011-08-30 22:27 <a href="http://www.cppblog.com/izualzhy/archive/2011/08/30/154732.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]谈谈2011年度最佳代码</title><link>http://www.cppblog.com/izualzhy/archive/2011/08/07/152731.html</link><dc:creator>izualzhy</dc:creator><author>izualzhy</author><pubDate>Sun, 07 Aug 2011 13:44:00 GMT</pubDate><guid>http://www.cppblog.com/izualzhy/archive/2011/08/07/152731.html</guid><wfw:comment>http://www.cppblog.com/izualzhy/comments/152731.html</wfw:comment><comments>http://www.cppblog.com/izualzhy/archive/2011/08/07/152731.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/izualzhy/comments/commentRss/152731.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/izualzhy/services/trackbacks/152731.html</trackback:ping><description><![CDATA[觉得挺有意思的，看着玩了~~<br />转过来<a href="http://www.kuqin.com/software-engineer/20110806/93122.html">http://www.kuqin.com/software-engineer/20110806/93122.html</a><br /><br />
<p>这段代码是这样的：</p><pre class="code">try
{
    if (you.believe(it) == true || you.believe(it) == false)
    {
        I.believe(it);
    }
}
catch (Exception ex)
{
    throw new Exception("It's a miracle!");
}
finally
{
    it.justHappened();
}</pre>
<p>代码与原文的对应关系不言自明，从命名风格上看，我们默认其为Java代码。话题主要是围绕在if条件的写法上。</p>
<h1>书写风格</h1>
<p>先来看看它的书写风格问题。我说这段代码不是老鸟写的，因为老鸟不会把一个布尔表达式跟true和false直接判断，而会写成：</p><pre class="code">if (you.believe(it) || !you.believe(it))</pre>
<p>于是有朋友提出，把布尔表达式跟true或false相比较来的更清晰一些，我表示这话并没有什么道理，因为这种读代码的方式是把视角停留在&#8220;数据&#8221;层面上：一个布尔表达式返回了布尔型的&#8220;数据&#8221;，于是把它和另外一个&#8220;数据&#8221;进行比较。如今的编程都在不断强调&#8220;语义&#8221;，&#8220;语义&#8221;的清晰才是真的清晰。我说Java是一门糟糕的语言，主要原因就是指它的表达能力太差，导致写出来的代码体现不出问题的解决方式，让人们把目光都集中在具体每条语句上了，所谓&#8220;见木不见林&#8221;。C#等现代语言都在强调&#8220;做什么&#8221;而不是&#8220;怎么做&#8221;，语义上就有很大提高了。</p>
<p>回到目前这个具体问题上，if里面的语义是&#8220;you.believe(it)&#8221;的返回结果，而不是它的值与另外一个布尔常量的比较结果。其实这个观点我从初中搞信息学竞赛时就被老师不断强调，今天我同样咨询了同事，他也赞同我的观点。如果您还继续坚持这种写法不太清晰的话，我只能说&#8220;这只是不适应而已，要让自己适应这类写法&#8221;，很多人还觉得LINQ不清晰呢，小学生还觉得高中数学的解法不清晰呢。</p>
<p>还有朋友认为，作为编码规范，应该要求这么写，例如：</p><pre class="code">if (10 == i)</pre>
<p>就是说，把常量写在比较操作的左边，并认为&#8220;这样更有普遍意义&#8221;。其实这也没有必要，这个习惯是从C语言时代遗传下来的&#8220;陋习&#8221;。在C语言里，如果把常量写在比较右侧，并且一不小心把&#8220;比较&#8221;操作符（两个等号）写成&#8220;赋值&#8221;操作符（一个等号），也可以编译通过，但是结果却大不相同，这给错误排查也会带来许多麻烦。但是，在如今的语言里已经比C语言做的安全多了，所以没必要制定这种规范。把一种语言的标准带入另一种语言不叫做&#8220;有普遍意义&#8221;，只是多余。</p>
<h1>代码含义</h1>
<p>然后要谈的便是代码与那句话的&#8220;映射&#8221;关系了，再来仔细读一下这个if子句：</p><pre class="code">if (you.believe(it) || !you.believe(it))
{
    I.believe(it);
}</pre>
<p>从&#8220;需求&#8221;上来理解，我认为代码应该保证if内部的代码一定会执行。那么现在这个需求肯定会满足吗？不一定，因为you.believe方法可能是有副作用的：如果它第一次调用返回false，而第二次调用时返回true，则if内部的代码就会整段略过，这显然不是铁道部王发言人的意图。因此，有同学提议代码应该是这样的：</p><pre class="code">if (true || you.believe(it))</pre>
<p>这么做的确可以忽略you.believe(it)的结果，因为它已经被短路了根本不会执行。可能它也能满足需求，但我想更合理的做法可能应该是：</p><pre class="code">if (you.believe(it) || true)</pre>
<p>这段代码与之前的区别就在于you.believe(it)一定会被调用一次，但是无所谓其结果是如何，这充分符合天朝<strike>某些</strike>部门喜欢装摸作样&#8220;咨询民意&#8221;的状况。</p>
<h1>扩展思考</h1>
<p>最后再来一道扩展思考题吧：有人把&#8220;你爱，或者不爱我，爱就在那里，不增不减&#8221;写成了一段C#代码：</p><pre class="code">if (you.Love(me) || !you.Love(me))
{
    love++;
    love--;
}</pre>
<p>有人说，这段代码的if条件本身应该被编译器优化掉，因此会直接执行if内部的代码。还有人说，if内部的代码也会被编译器优化掉。您怎么看，为什么呢？</p><img src ="http://www.cppblog.com/izualzhy/aggbug/152731.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/izualzhy/" target="_blank">izualzhy</a> 2011-08-07 21:44 <a href="http://www.cppblog.com/izualzhy/archive/2011/08/07/152731.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>test</title><link>http://www.cppblog.com/izualzhy/archive/2010/11/20/134162.html</link><dc:creator>izualzhy</dc:creator><author>izualzhy</author><pubDate>Sat, 20 Nov 2010 09:54:00 GMT</pubDate><guid>http://www.cppblog.com/izualzhy/archive/2010/11/20/134162.html</guid><wfw:comment>http://www.cppblog.com/izualzhy/comments/134162.html</wfw:comment><comments>http://www.cppblog.com/izualzhy/archive/2010/11/20/134162.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/izualzhy/comments/commentRss/134162.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/izualzhy/services/trackbacks/134162.html</trackback:ping><description><![CDATA[
<p>this is a test for Zoundary blog writer</p>
<p>changed~~</p>
<p class="zoundry_bw_tags">
  <!-- Tag links generated by Zoundry Blog Writer. Do not manually edit. http://www.zoundry.com -->
  <span class="ztags"><span class="ztagspace">Technorati</span> : <a href="http://technorati.com/tag/Zoundary" class="ztag" rel="tag">Zoundary</a>, <a href="http://technorati.com/tag/test" class="ztag" rel="tag">test</a></span> 
</p><img src ="http://www.cppblog.com/izualzhy/aggbug/134162.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/izualzhy/" target="_blank">izualzhy</a> 2010-11-20 17:54 <a href="http://www.cppblog.com/izualzhy/archive/2010/11/20/134162.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>写给每一个面临 OFFER 选择的人[转自byr]</title><link>http://www.cppblog.com/izualzhy/archive/2010/11/20/134145.html</link><dc:creator>izualzhy</dc:creator><author>izualzhy</author><pubDate>Sat, 20 Nov 2010 03:22:00 GMT</pubDate><guid>http://www.cppblog.com/izualzhy/archive/2010/11/20/134145.html</guid><wfw:comment>http://www.cppblog.com/izualzhy/comments/134145.html</wfw:comment><comments>http://www.cppblog.com/izualzhy/archive/2010/11/20/134145.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/izualzhy/comments/commentRss/134145.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/izualzhy/services/trackbacks/134145.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<p>不知道说得对不对，但看了还是很有感触的<br><br><br>写在前面的话 <br>&nbsp;<br>没有两个人的想法是相同的，甚至同一个人在人生的不同阶段对同一件事情的态度都会不一样。十年后我审视这篇文章也许正如同我现在审视十年前的自己一般幼稚。我不期望大家都认同以下观点，<strong>我只希望每一个你看完我的帖子会有所启发</strong>。其实最早这篇文章最初的目的只是想给外地的研究生看的，现在越写越乱已经偏离了我的本意。 <br>&nbsp;<br><strong><br>一、生活。 <br></strong><br>１、城市 <br>&nbsp;<br>四年前你选择北邮，所以你来到这个陌生的城市。不管你喜欢或者不喜欢这个城市，现在的你熟悉这个城市更甚于比你自己的家乡。你选择北京是因为学院路上的十几所高校，还是眷恋CBD的繁华，或者为了一个名不见经传的小子在大城市白手起家的传说。无论如何。你选择了北京。 <br>&nbsp;<br>问题是任何选择面临一个时机的问题。任何时候去 google 或者 microsoft 的人都顶着众人羡慕的目光。但我一点不羡慕他们，我只羡慕 98 年去华为，01年去移动，03年去百度的家伙们。这是废话，我只想告诉你，同样的地方，不同的时间去的结果是完全不一样的。 <br>&nbsp;<br>北京的容量是有限的，但北京的外来人口涌入是有目共睹的。70后赶上了好时候，80后很艰辛，不知道90后会怎么样。就像吃煎饼果子，第一个很好吃，第二个勉强撑下去，第三个就有一半卡在嘴里怎么也咽不下去了。我中学一哥们读的清华，他在公司里是学历最差的，老板出去办事随行的是一个世界银行的顾问的和一个耶鲁大普的博士。你觉得老板会先提拔谁呢？在二线城市你见过几个清华的硕士？在我们抱怨&#8220;被选择&#8221;的时候我们忘记了正是我们自己选择了去&#8220;被选择&#8221;。 <br>&nbsp;<br>２、个人生活 <br>&nbsp;<br>工作后的生活由三部份构成：睡觉、上班、个人生活。下面是你在北京的个人生活： <br>&nbsp;<br>＜25岁：酒吧夜店的年代。 <br>25~28：数个月看房子，数个月装修房子，数个月至数年时间相亲，数个月两地奔波谈婚论嫁，数月准备婚礼。 <br>28~30：消停了一年。一年时间照顾怀孕的老婆。 <br>30~33：小孩出生。进行各种注册、各种检查、每月至少生病去一次医院。 <br>33~35：小孩上幼儿园。天天接送并开始准备课余学习画画、舞蹈、钢琴、英语等课程。开始准备买学区房。 <br>35~40：每天提前一小时起床送上学。提前一小时下班接放学。课余补习奥数、英语。天天回家做饭。这一过程将持续12年。 <br>40~45：每天关心小孩学习以及在学校有没有被男生骗上床。经常为了父母生病而两地奔波。开始准备为父母在北京买房子。 <br>45~50：小孩上大学。开始为小孩的婚房存首付。开始经常早起排队报销父母的医药费。 <br>&nbsp;<br>其实我啰里八嗦写这么多就是想告诉你，不要以为你 28 岁以后你还能有多少时间和精力去奋斗。 <br><strong><br>二、心态 <br></strong><br>１、成功 <br>&nbsp;<br>我曾经以为有自己的大公司就是成功。就像每个光棍都曾经以为拉个女生满校园遛就是幸福。不错，你的事业可以得到男人们敬偑，就像你和校花拍拖可以得到全校男生&#8220;我要杀死你&#8221;的眼神。但是事实上并不是每个人都愿意去追求校花－－很明显不可能每个人都追求得到，校花只有一个。所以我认为追求成功是是追求自己能力范围内的幸福。简单的来说，你的追求超过了自己的能力，你就只能继续打光棍。 <br>&nbsp;<br>２、围城 <br>&nbsp;<br>围城的意思是得不到的永远是最好的。我会告诉你不要来北京，我在重庆移动的同学会告诉你不要回重庆。我会告诉你不要去外企，我在公路所的同学会告诉你不要去机关。忙的天天累得发狂，闲的天天心里闲得发慌。如果你不明白什么对你是最重要的，那么无论你作出什么样的选择以后都会后悔的。 <br><strong><br>三、工作 <br></strong><br>１、好工作 <br>&nbsp;<br>什么样的工作是一个好工作。不同的人的定义不一样。离家走路5分钟、10点上班3点下班、每年30天年假、20万年薪、老板喜欢你、奖金6位数、什么都报销，这其中任何一种都可以作为好工作的定义。问题是，这些条件不可能全部集中到一份工作上，当然，如果有一份工作这些都占齐了，那肯定轮不到你（如果轮到你了，那么恭喜你有个好爸爸），所以你必须妥协。问题是人都是三心二意的，这两年觉得钱多好，过两年有小孩了觉得下班早点好，再过两年年纪大了喜欢出去玩又希望休假多一些，所以你必须考虑长久一点。考虑以下三点， <br>&nbsp;<br>第一，没钱娶不到老婆，这是前人泪的教训 <br>第二，没时间老婆要给你戴帽子，这是前人血的教训 <br>第三，工作丢了老婆会跑路，这是前人血泪的教训 <br>&nbsp;<br>以上纯属扯淡，我的意思是说钱、时间、稳定这是最重要的三点。此外即使你现在是单身，考虑到你一生的大部份工作生活是两个人的事，你工作的选择必须要同时考虑到你的LG/LP的工作，既使你的占不齐，两个人的工作也一定要占齐这三方面。 <br>&nbsp;<br>２、第一份工作 <br>&nbsp;<br>首先看一下你在找到第一份工作的时候你付出了什么。 <br>&nbsp;<br>第一、应届生落户的机会。 <br>这个问题很复杂。应届生可以解决北京户口，问题是在于北京户口有什么用？你在公司单位拿到的户口实际上叫作北京集体户口，又称为临时户口。如果你离开这个单位回家，那么你户口也会跟着回家。小孩不能落集体户口，这意味着即使你是北京集体户口，你的小孩也只能回家，简单的说，你小孩不是北京人。当然有规律就有例外，我现在只讨论一般情况 <br>那么怎么让你的集体户口变成常驻户口呢？答案是买房子，这就叫刚需。买完房子以后你可以到单位领出集体户口迁入住房所在地的派出所成为常驻户口。这意味着你和你的小孩就名正言顺的成为北京人。 <br>但是千万不要忘记北京户口最大的作用是什么，你看中的当然是北京的教育资源。每个外地考生都在抱怨为什么北京的分数线那么低，因为他们不知道北京的教育资源是怎么分配的。他们都天真的以为在北京生个孩子就可以享受5xx的清华录取线，让他们的小孩彻底的从万恶的高考中解放出来，不用重蹈父辈们千军万马过独木桥的复辙。殊不知北京千百万的小孩的父母谁又服得了谁呢？教育局怎么让他们服气呢？ <br>北京的教育资源的问题叫做划片招生，划片招生的意思简单的解释就是，你在哪里买房子就得上哪里的学校。当然说到底是一个钱字更好的学校永远意味着更高的房价。你去天通苑买房子小孩读的就是天通苑小学，我在这里就不好去描述天通苑小学有多烂了。如果你想上中关村二小（你可以简单的理解为区重点），基本上80年代的房子大概是3w+，而且房源非常非常紧俏。而且最难最难的问题在于，你得先做通你LP的思想工作，我不认为住惯了复式的外地80后女生会愿意花近 200w 买一套比她年龄更大的一室一厅当婚房。 <br>&nbsp;<br>我一直说户口没啥用的意思就是说有户口没钱一点用没有。 <br>&nbsp;<br>第二、被公司培训的机会。 <br>公司通常只对应届生进行比较系统的培训，而通常考核对应届生相应会比较宽容。而非应届生如果来了公司一周还不会干活就有个叫作试用期的东西可以直接把你扫地出门。 <br>&nbsp;<br>第三、得到编制（事业单位）的机会。 <br>简单的说，很多军工及垄断央企只招应届生。近年来，国家加大国防投入所以很多军工单位效益不错。举个例子我姐在西部一个部队医院基本上每月税后 1w 吧。这些地方通常要求很简单：应届、硕/博士、最好有背景。非应届不管你是微软总监还是google总裁也进不去。再比如，移动社招和校招的待遇差别大家也都看得到。。 <br>事业单位有个东西叫编制。编制基本上是旱涝保收的代名词。不是应届生又想要编制？读博去吧。 <br>&nbsp;<br>第四、更换行业背景的机会。 <br>即使你是通信专业毕业的，你去应聘咨询公司一点问题没有，公司会认为应届生是白纸可以培养。如果你在通信公司工作过两年想换个行业呢？这个、基本上、很难。你可以经常看到有学生同时拿到银行、四大、18M的 offer。你要换行业？我建议你读博。 <br>&nbsp;<br>第五、完全自由的几年时间。 <br>人生的每一个阶段有每一个阶段的事情要做。基本上男28女25之前是你最闲的几年，之后就是各种各样的麻烦事情。要么你可以做个不顾家的男人或者女强人，要么你就没法把心思全放在工作上。 <br>&nbsp;<br>以上几点只有你的第一份工作可以提供给你（基本上）。那么你应当期望从你的第一份工作中得到什么？ <br>&nbsp;<br>第一、稳定和舒适。 <br>舒适稳定通常只羽毛球和某些上面提到的应届生情节的单位。既然你一辈子只有这一次机会可以进去，那么错过了就请不要后悔。我觉得女生一定优先考虑这点，不然你家里永远会有没人洗的衣服和碗 以及 没人带饿肚子的孩子。 <br>&nbsp;<br>第二、行业背景和职业规划。 <br>或者说，平台。我不知道怎么描述这个概念，你可以把它理解为跳板。比如说普华永道，性价比不高大家都知道。但是你在那里干两年之后可以跳到 AIG 去，后者的年薪是 30w+　的。 <br>&nbsp;<br>第三、第一桶金。 <br>这是应届生从创业型公司唯一可以得到的。在一个公司里，你要升上去最容易的途径是公司规模的扩大。但是在中国的问题是老人不会服管。所以即使你是公司的元老如果你年龄不够一样很难升上去。特别是对于本科生来说，股票和期权是你把自己做为对这个公司的高风险投入的唯一回报。 <br>&nbsp;<br>户口是个 bonus ，至少我认为它应当排在以上几点之后。 <br><strong><br>四、写给女生看的 <br></strong><br>昨天有个女生问我关于 offer 的选择问题，我随便聊聊我对女生的观点 <br>&nbsp;<br>1、事业 <br>通常情况下，如果夫妻双方都非常有事业心，那么家庭生活和父母子女通常是不会幸福的。如果你选择做一个女强人，那么你一定要找个很没事业心的老公；否则你的最佳选择做一个成功男人背后的女人。 <br>&nbsp;<br>2、爱情 <br>北邮的女生大多数在学校里都有男朋友的。对女硕士和女博士我的观点是，如果你们关系稳定，那自然最好；如果你们关系不稳定，或者你单身，那么请赶紧分手并把找男人放上议事日程头条，越往后特别是工作以后找到合适的概率越小。一个 30- 朋友的原话是：&#8220;找个好男人比找好工作难多了。&#8221; 一个中学同学的原话是：&#8220;（男人）有钱的不少，靠谱的没有。&#8221; 我周围 27+ 年薪 10w+ 甚至有房有车的女生单着的太多了。 <br></p>
<img src ="http://www.cppblog.com/izualzhy/aggbug/134145.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/izualzhy/" target="_blank">izualzhy</a> 2010-11-20 11:22 <a href="http://www.cppblog.com/izualzhy/archive/2010/11/20/134145.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深入浅出之正则表达式[转] </title><link>http://www.cppblog.com/izualzhy/archive/2010/11/19/134107.html</link><dc:creator>izualzhy</dc:creator><author>izualzhy</author><pubDate>Fri, 19 Nov 2010 11:34:00 GMT</pubDate><guid>http://www.cppblog.com/izualzhy/archive/2010/11/19/134107.html</guid><wfw:comment>http://www.cppblog.com/izualzhy/comments/134107.html</wfw:comment><comments>http://www.cppblog.com/izualzhy/archive/2010/11/19/134107.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/izualzhy/comments/commentRss/134107.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/izualzhy/services/trackbacks/134107.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 深入浅出之正则表达式（一）前言：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;半年前我对正则表达式产生了兴趣，在网上查找过不少资料，看过不少的教程，最后在使用一个正则表达式工具RegexBuddy时发现他的教程写的非常好，可以说是我目前见过最好的正则表达式教程。于是一直想把他翻译过来。这个愿望直到这个五一长假才得以实现，结果就有了这篇文章。关于本文的名...&nbsp;&nbsp;<a href='http://www.cppblog.com/izualzhy/archive/2010/11/19/134107.html'>阅读全文</a><img src ="http://www.cppblog.com/izualzhy/aggbug/134107.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/izualzhy/" target="_blank">izualzhy</a> 2010-11-19 19:34 <a href="http://www.cppblog.com/izualzhy/archive/2010/11/19/134107.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转个状态码的文章</title><link>http://www.cppblog.com/izualzhy/archive/2010/11/08/132993.html</link><dc:creator>izualzhy</dc:creator><author>izualzhy</author><pubDate>Mon, 08 Nov 2010 06:55:00 GMT</pubDate><guid>http://www.cppblog.com/izualzhy/archive/2010/11/08/132993.html</guid><wfw:comment>http://www.cppblog.com/izualzhy/comments/132993.html</wfw:comment><comments>http://www.cppblog.com/izualzhy/archive/2010/11/08/132993.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/izualzhy/comments/commentRss/132993.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/izualzhy/services/trackbacks/132993.html</trackback:ping><description><![CDATA[<br>
<h2>日志中的HTTP状态码都代表什么？</h2>
<!-- Article -->
<p>
<p>作SEO时，我们经常会在日志上看到类似这样的代码：</p>
<p>61.135.166.232 - - [31/Dec/2007:02:30:11 +0800] "GET /category21.html HTTP/1.1" 200 10968 "-" "Baiduspider+(+http://www.baidu.com/search/spider.htm)"</p>
<p>66.249.70.172 - - [31/Dec/2007:03:36:10 +0800] "GET /32_10_zh.html HTTP/1.1" 200 18395 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"</p>
<p>这里面需要知道的，就是那个奇怪的数字&#8220;200&#8221;（另外那个数字表示抓取的文件大小）。<br>&#8220;200&#8221;就是<a title=HTTP状态码是什么？ href="http://www.seowhy.com/39_27_zh.html" target=_blank><u><font color=#0000ff>HTTP状态码</font></u></a>。</p>
<p><a title=SEO href="http://www.seowhy.com/" target=_blank><u><font color=#0000ff>SEO</font></u></a>过程中最常见的HTTP状态码有：</p>
<ul>
    <li>200 - 服务器成功返回网页
    <li>404 - 请求的网页不存在
    <li>503 - 服务器超时 </li>
</ul>
<p><br>其他经常碰到的HTTP状态码列表如下：</p>
<div>HTTP状态码&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 摘要说明</div>
<div align=left>
<hr style="WIDTH: 392px; HEIGHT: 2px" SIZE=2>
</div>
<div align=left>成功2&#215;&#215;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 成功处理了请求的状态码。<br>200&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 服务器已成功处理了请求并提供了请求的网页。<br>204&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;&nbsp;&nbsp; <br>重定向3&#215;&#215;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每次请求中使用重定向不要超过 5 次。<br>301&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;请求的网页已永久移动到新位置。当URLs发生变化时，使用301代码。搜索引擎索引中保存新的URL。<br>302&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 请求的网页临时移动到新位置。搜索引擎索引中保存原来的URL。<br>304&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果网页自请求者上次请求后没有更新，则用304代码告诉搜索引擎机器人，可节省带宽和开销。<br>客户端错误4&#215;&#215;&nbsp;&nbsp;表示请求可能出错，妨碍了服务器的处理。<br>400&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 服务器不理解请求的语法。<br>403&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 服务器拒绝请求。<br>404&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 服务器找不到请求的网页。服务器上不存在的网页经常会返回此代码。<br>410&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 请求的资源永久删除后，服务器返回此响应。该代码与 404（未找到）代码相似，但在资源以前存在而现在不存在的情况下，有时用来替代404 代码。如果资源已永久删除，应当使用 301 指定资源的新位置。<br>服务器错误5&#215;&#215;&nbsp;&nbsp; 表示服务器在处理请求时发生内部错误。这些错误可能是服务器本身的错误，而不是请求出错。<br>500&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 服务器遇到错误，无法完成请求。<br>503&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 服务器目前无法使用（由于超载或停机维护）。通常，这只是暂时状态。 </div>
<br>
<img src ="http://www.cppblog.com/izualzhy/aggbug/132993.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/izualzhy/" target="_blank">izualzhy</a> 2010-11-08 14:55 <a href="http://www.cppblog.com/izualzhy/archive/2010/11/08/132993.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>