﻿<?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>博客园-sharplife</title><link>http://www.cnblogs.com/sharplife/</link><description>software is a artwork, also make the life better !!! </description><language>zh-cn</language><lastBuildDate>Wed, 10 Feb 2010 02:28:50 GMT</lastBuildDate><pubDate>Wed, 10 Feb 2010 02:28:50 GMT</pubDate><ttl>60</ttl><item><title>2010,</title><link>http://www.cnblogs.com/sharplife/archive/2010/01/17/1650077.html</link><dc:creator>sharplife</dc:creator><author>sharplife</author><pubDate>Sun, 17 Jan 2010 10:40:00 GMT</pubDate><guid>http://www.cnblogs.com/sharplife/archive/2010/01/17/1650077.html</guid><description><![CDATA[<p>阅读: 6 评论: 0 作者: <a href="http://www.cnblogs.com/sharplife/" target="_blank">sharplife</a> 发表于 2010-01-17 18:40 <a href="http://www.cnblogs.com/sharplife/archive/2010/01/17/1650077.html" target="_blank">原文链接</a></p><p>是时间少了吧，发现原来我曾经整过那么多东东啊，是该为之前感到欣慰还是该为现在感到无奈呐</p>
<p>&nbsp;</p>
<p>流浪中，最近出差上海做项目，愈发感到时间真的太少，该说没时间进步还是时间都花在停滞上了呐，真有点无所适从啦，下一步怎么走呐</p>
<p>&nbsp;</p>
<p>幸运的是无主的生活里还有一群真挚的朋友，这已经算是很大的幸运了吧，祝我们新的一年里都能取得更大的进步吧</p>
<p>&nbsp;</p>
<p>2012到了，2012还远</p><img src="http://www.cnblogs.com/sharplife/aggbug/1650077.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/sharplife/archive/2010/01/17/1650077.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/sharplife/archive/2010/01/17/1650077.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56804/" target="_blank">微软追回23个域名所有权</a><span style="color:gray">(2010-02-10 10:22)</span><br/>· <a href="http://news.cnblogs.com/n/56803/" target="_blank">Yahoo 对 Google Buzz 的挑衅很不满：我们两年前就 Buzz 上了</a><span style="color:gray">(2010-02-10 10:19)</span><br/>· <a href="http://news.cnblogs.com/n/56802/" target="_blank">Google Buzz 第一时间上手体验，twitter + Facebook + Foursquare？</a><span style="color:gray">(2010-02-10 10:17)</span><br/>· <a href="http://news.cnblogs.com/n/56801/" target="_blank">微软发布13个安全补丁 平最高纪录</a><span style="color:gray">(2010-02-10 10:03)</span><br/>· <a href="http://news.cnblogs.com/n/56800/" target="_blank">Windows 7下MSN无法启动或报错解决方法</a><span style="color:gray">(2010-02-10 10:00)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56782/" target="_blank">2010年2月编程语言排行榜</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>Nginx + Apache, mod_wsgi serve python web application （test with TG2）</title><link>http://www.cnblogs.com/sharplife/archive/2009/03/28/1424019.html</link><dc:creator>sharplife</dc:creator><author>sharplife</author><pubDate>Sat, 28 Mar 2009 09:05:00 GMT</pubDate><guid>http://www.cnblogs.com/sharplife/archive/2009/03/28/1424019.html</guid><description><![CDATA[<p>阅读: 669 评论: 0 作者: <a href="http://www.cnblogs.com/sharplife/" target="_blank">sharplife</a> 发表于 2009-03-28 17:05 <a href="http://www.cnblogs.com/sharplife/archive/2009/03/28/1424019.html" target="_blank">原文链接</a></p><p>Ref:</p>
<p><a href="http://wiki.jmoiron.net/MigratingFromApacheToNginx">http://wiki.jmoiron.net/MigratingFromApacheToNginx</a></p>
<p><a href="http://turbogears.org/2.0/docs/main/Deployment/modwsgi+virtualenv.html">http://turbogears.org/2.0/docs/main/Deployment/modwsgi+virtualenv.html</a></p>
<p><a href="http://wiki.nginx.org/NginxConfiguration">http://wiki.nginx.org/NginxConfiguration</a></p>
<p>Req:</p>
<p>Debian os, python2.5, apache2, libapache2-mod-wsgi</p>
<p>Nginx is designed to do best to serve static files and proxying request to it's actual processor, so our deployment will use nginx as a front end, actually act as a web server, also do some load balance job; apache act as a application server role in our deployment, we don't use the mod_wsgi(atually apache-mod_wsgi,not that nginx's patch) in a embeded mode, which code executed in the apache's worker process and cause apache do much work that it shouldn't, daemon mode is like FastCGI and apache proxying task to other worker process, like wsgi handers.</p>
<ol>
<li>Follow above link2 to install apache/virtualenv, also <a href="http://www.cnblogs.com/sharplife/archive/2009/03/06/1404818.html">install TG2RC1</a>(currently), then get a sample app "myapp"</li>
<li>Follow above link2 to do a apache+mod_wsgi deployment for the "myapp", best to deploy to /usr/local/turbogears/ for convenient, make sure it's run ok.</li>
<li>Modify /etc/apache2/ports.conf to add muti-virtualhost refer to our "myapp"</li>
<p>&nbsp;</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000;">#</span><span style="color: #008000;">/etc/apache2/ports.conf</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br />NameVirtualHost&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">:</span><span style="color: #000000;">8119</span><span style="color: #000000;"><br />Listen&nbsp;</span><span style="color: #000000;">8119</span><span style="color: #000000;"><br /><br />NameVirtualHost&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">:</span><span style="color: #000000;">8120</span><span style="color: #000000;"><br />Listen&nbsp;</span><span style="color: #000000;">8120</span></div>
<p>&nbsp;</p>
<li>Modify /etc/apache2/sites-available/myapp to follow above ports</li>
<p>&nbsp;</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000;">#</span><span style="color: #008000;">Apache&nbsp;configuration&nbsp;File</span><span style="color: #008000;"><br />#</span><span style="color: #008000;">Read&nbsp;README.txt</span><span style="color: #008000;"><br />#</span><span style="color: #008000;">1.&nbsp;This&nbsp;file&nbsp;should&nbsp;be&nbsp;added&nbsp;to&nbsp;your&nbsp;apache&nbsp;config&nbsp;folder;&nbsp;On&nbsp;Debian&nbsp;copy&nbsp;to&nbsp;/etc/apache2/sites-available/</span><span style="color: #008000;"><br />#</span><span style="color: #008000;">Default&nbsp;location&nbsp;for&nbsp;tg2&nbsp;project&nbsp;is&nbsp;/usr/local/turbogears/myapp.&nbsp;That&nbsp;is&nbsp;where&nbsp;you&nbsp;should&nbsp;put&nbsp;your&nbsp;project.&nbsp;This&nbsp;folder&nbsp;should&nbsp;be&nbsp;outside&nbsp;of&nbsp;apache&nbsp;location.&nbsp;Your&nbsp;package&nbsp;should&nbsp;not&nbsp;be&nbsp;installed&nbsp;into&nbsp;python&nbsp;site-package.</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br /></span><span style="color: #008000;">#</span><span style="color: #008000;">2.&nbsp;Alias/Allow&nbsp;apache&nbsp;to&nbsp;serve&nbsp;static&nbsp;content.</span><span style="color: #008000;"><br />#</span><span style="color: #008000;">Alias&nbsp;/myapp/images&nbsp;/usr/local/turbogears/myapp/myapp/public/images</span><span style="color: #008000;"><br />#</span><span style="color: #008000;">Alias&nbsp;/myapp/css&nbsp;/usr/local/turbogears/myapp/myapp/public/css</span><span style="color: #008000;"><br />#</span><span style="color: #008000;">Alias&nbsp;/myapp/javascript&nbsp;/usr/local/turbogears/myapp/myapp/public/javascript</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br /></span><span style="color: #008000;">#</span><span style="color: #008000;">Embeded&nbsp;mode&nbsp;(http://example.com/myapp).For&nbsp;big&nbsp;websites&nbsp;with&nbsp;a&nbsp;lot&nbsp;of&nbsp;memory&nbsp;and&nbsp;visitors.</span><span style="color: #008000;"><br />#</span><span style="color: #008000;">WSGIScriptAlias&nbsp;/myapp&nbsp;/usr/local/turbogears/myapp/apache/myapp.wsgi</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br /></span><span style="color: #008000;">#</span><span style="color: #008000;">3.&nbsp;Test&nbsp;if&nbsp;modwsgi&nbsp;is&nbsp;working.&nbsp;Uncomment&nbsp;below&nbsp;line,&nbsp;and&nbsp;go&nbsp;to&nbsp;http://localhost/test:</span><span style="color: #008000;"><br />#</span><span style="color: #008000;">WSGIScriptAlias&nbsp;/test&nbsp;/usr/local/turbogears/myapp/apache/test.wsgi</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br /></span><span style="color: #008000;">#</span><span style="color: #008000;">4.&nbsp;[Optional]&nbsp;Sitewide&nbsp;(http://example.com/)</span><span style="color: #008000;"><br />#</span><span style="color: #008000;">Alias&nbsp;/images&nbsp;/usr/local/turbogears/myapp/myapp/public/images</span><span style="color: #008000;"><br />#</span><span style="color: #008000;">Alias&nbsp;/css&nbsp;/usr/local/turbogears/myapp/myapp/public/css</span><span style="color: #008000;"><br />#</span><span style="color: #008000;">Alias&nbsp;/javascript&nbsp;/usr/local/turbogears/myapp/myapp/public/javascript</span><span style="color: #008000;"><br />#</span><span style="color: #008000;">WSGIScriptAlias&nbsp;/&nbsp;/usr/local/turbogears/apache/myapp.wsgi</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br /></span><span style="color: #008000;">#</span><span style="color: #008000;">5.&nbsp;[Optional]&nbsp;Deamon&nbsp;mode&nbsp;with&nbsp;10&nbsp;threads&nbsp;and&nbsp;3&nbsp;processes.&nbsp;For&nbsp;small&nbsp;to&nbsp;medium&nbsp;website.</span><span style="color: #008000;"><br />#</span><span style="color: #008000;">WSGIDaemonProcess&nbsp;myapp&nbsp;threads=10&nbsp;processes=3</span><span style="color: #008000;"><br />#</span><span style="color: #008000;">WSGIProcessGroup&nbsp;myapp</span><span style="color: #008000;"><br />#</span><span style="color: #008000;">WSGIScriptAlias&nbsp;/&nbsp;/usr/local/turbogears/myapp/apache/myapp.wsgi</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br /></span><span style="color: #008000;">#</span><span style="color: #008000;">6.&nbsp;Directory&nbsp;Permission.</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Directory&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">usr</span><span style="color: #000000;">/</span><span style="color: #000000;">local</span><span style="color: #000000;">/</span><span style="color: #000000;">turbogears</span><span style="color: #000000;">/</span><span style="color: #000000;">myapp</span><span style="color: #000000;">/</span><span style="color: #000000;">apache</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />Order&nbsp;deny,allow<br />Allow&nbsp;</span><span style="color: #0000FF;">from</span><span style="color: #000000;">&nbsp;all<br /></span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">Directory</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br /><br /></span><span style="color: #008000;">#</span><span style="color: #008000;">7.&nbsp;[Optional]&nbsp;If&nbsp;you&nbsp;want&nbsp;to&nbsp;use&nbsp;Virtualhost&nbsp;apache&nbsp;settings.</span><span style="color: #008000;"><br />#</span><span style="color: #008000;">Sample&nbsp;Virtual&nbsp;Host&nbsp;configuration&nbsp;would&nbsp;look&nbsp;like&nbsp;this:</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br /></span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Directory&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">usr</span><span style="color: #000000;">/</span><span style="color: #000000;">local</span><span style="color: #000000;">/</span><span style="color: #000000;">turbogears</span><span style="color: #000000;">/</span><span style="color: #000000;">myapp</span><span style="color: #000000;">/</span><span style="color: #000000;">apache</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;Order&nbsp;allow,deny<br />&nbsp;&nbsp;&nbsp;&nbsp;Allow&nbsp;</span><span style="color: #0000FF;">from</span><span style="color: #000000;">&nbsp;all<br /></span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">Directory</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br /><br />NameVirtualHost&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">:</span><span style="color: #000000;">8119</span><span style="color: #000000;"><br /></span><span style="color: #000000;">&lt;</span><span style="color: #000000;">VirtualHost&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">:</span><span style="color: #000000;">8119</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">WSGIScriptAlias&nbsp;/&nbsp;/usr/local/turbogears/myapp/apache/myapp.wsgi</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WSGIDaemonProcess&nbsp;myapp1&nbsp;threads</span><span style="color: #000000;">=</span><span style="color: #000000;">10</span><span style="color: #000000;">&nbsp;processes</span><span style="color: #000000;">=</span><span style="color: #000000;">3</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WSGIProcessGroup&nbsp;myapp1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WSGIScriptAlias&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">usr</span><span style="color: #000000;">/</span><span style="color: #000000;">local</span><span style="color: #000000;">/</span><span style="color: #000000;">turbogears</span><span style="color: #000000;">/</span><span style="color: #000000;">myapp</span><span style="color: #000000;">/</span><span style="color: #000000;">apache</span><span style="color: #000000;">/</span><span style="color: #000000;">myapp.wsgi<br /></span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">VirtualHost</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br /><br />NameVirtualHost&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">:</span><span style="color: #000000;">8120</span><span style="color: #000000;"><br /></span><span style="color: #000000;">&lt;</span><span style="color: #000000;">VirtualHost&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">:</span><span style="color: #000000;">8120</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WSGIDaemonProcess&nbsp;myapp2&nbsp;threads</span><span style="color: #000000;">=</span><span style="color: #000000;">10</span><span style="color: #000000;">&nbsp;processes</span><span style="color: #000000;">=</span><span style="color: #000000;">3</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WSGIProcessGroup&nbsp;myapp2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WSGIScriptAlias&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">usr</span><span style="color: #000000;">/</span><span style="color: #000000;">local</span><span style="color: #000000;">/</span><span style="color: #000000;">turbogears</span><span style="color: #000000;">/</span><span style="color: #000000;">myapp</span><span style="color: #000000;">/</span><span style="color: #000000;">apache</span><span style="color: #000000;">/</span><span style="color: #000000;">myapp.wsgi<br /></span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">VirtualHost</span><span style="color: #000000;">&gt;</span></div>
<p>&nbsp;</p>
<li>Modify /etc/nginx/nginx.conf to serve static and proxy request to apache appsvr</li>
<p>&nbsp;</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000;">#</span><span style="color: #008000;">user&nbsp;&nbsp;nobody;</span><span style="color: #008000;"><br /></span><span style="color: #000000;">worker_processes&nbsp;&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br /><br /></span><span style="color: #008000;">#</span><span style="color: #008000;">error_log&nbsp;&nbsp;logs/error.log;</span><span style="color: #008000;"><br />#</span><span style="color: #008000;">error_log&nbsp;&nbsp;logs/error.log&nbsp;&nbsp;notice;</span><span style="color: #008000;"><br />#</span><span style="color: #008000;">error_log&nbsp;&nbsp;logs/error.log&nbsp;&nbsp;info;</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br /></span><span style="color: #008000;">#</span><span style="color: #008000;">pid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logs/nginx.pid;</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br /><br />events&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;worker_connections&nbsp;&nbsp;</span><span style="color: #000000;">1024</span><span style="color: #000000;">;<br />}<br /><br /><br />http&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;include&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mime.types;<br />&nbsp;&nbsp;&nbsp;&nbsp;default_type&nbsp;&nbsp;application</span><span style="color: #000000;">/</span><span style="color: #000000;">octet</span><span style="color: #000000;">-</span><span style="color: #000000;">stream;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">log_format&nbsp;&nbsp;main&nbsp;&nbsp;'$remote_addr&nbsp;-&nbsp;$remote_user&nbsp;[$time_local]&nbsp;$request&nbsp;'</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'"$status"&nbsp;$body_bytes_sent&nbsp;"$http_referer"&nbsp;'</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'"$http_user_agent"&nbsp;"$http_x_forwarded_for"';</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">access_log&nbsp;&nbsp;logs/access.log&nbsp;&nbsp;main;</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;sendfile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;on;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">tcp_nopush&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;on;</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">keepalive_timeout&nbsp;&nbsp;0;</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;keepalive_timeout&nbsp;&nbsp;</span><span style="color: #000000;">65</span><span style="color: #000000;">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">gzip&nbsp;&nbsp;on;</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;upstream&nbsp;myapp&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server&nbsp;</span><span style="color: #000000;">127.0</span><span style="color: #000000;">.</span><span style="color: #000000;">0.1</span><span style="color: #000000;">:</span><span style="color: #000000;">8119</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server&nbsp;</span><span style="color: #000000;">127.0</span><span style="color: #000000;">.</span><span style="color: #000000;">0.1</span><span style="color: #000000;">:</span><span style="color: #000000;">8120</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;other&nbsp;balance</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;server&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">80</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server_name&nbsp;&nbsp;localhost;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;site_media&nbsp;-&nbsp;folder&nbsp;in&nbsp;uri&nbsp;for&nbsp;static&nbsp;files</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location&nbsp;</span><span style="color: #000000;">~</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">^/</span><span style="color: #000000;">\</span><span style="color: #000000;">/</span><span style="color: #000000;">(images</span><span style="color: #000000;">|</span><span style="color: #000000;">javascript</span><span style="color: #000000;">|</span><span style="color: #000000;">js</span><span style="color: #000000;">|</span><span style="color: #000000;">css</span><span style="color: #000000;">|</span><span style="color: #000000;">flash</span><span style="color: #000000;">|</span><span style="color: #000000;">media</span><span style="color: #000000;">|</span><span style="color: #000000;">static)</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">usr</span><span style="color: #000000;">/</span><span style="color: #000000;">local</span><span style="color: #000000;">/</span><span style="color: #000000;">turbogears</span><span style="color: #000000;">/</span><span style="color: #000000;">myapp</span><span style="color: #000000;">/</span><span style="color: #000000;">public;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;access_log&nbsp;&nbsp;&nbsp;off;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;expires&nbsp;30d;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">charset&nbsp;koi8-r;</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">access_log&nbsp;&nbsp;logs/host.access.log&nbsp;&nbsp;main;</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;root&nbsp;&nbsp;&nbsp;html;</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;index&nbsp;&nbsp;index.html&nbsp;index.htm;</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy_pass&nbsp;http:</span><span style="color: #000000;">//</span><span style="color: #000000;">myapp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">error_page&nbsp;&nbsp;404&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/404.html;</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;redirect&nbsp;server&nbsp;error&nbsp;pages&nbsp;to&nbsp;the&nbsp;static&nbsp;page&nbsp;/50x.html</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">#<br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;error_page&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">500</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">502</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">503</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">504</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">50x.html;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">50x.html&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;&nbsp;&nbsp;html;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008000;"></span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /></span><span style="color: #000000;">}</span></div>
<p>&nbsp;</p>
<li>Test the deployment</li>
<p>&nbsp;</p>
<div class="cnblogs_code"><span style="color: #008000;"><span style="color: #000000;"></span></span><span style="color: #008000;"><span style="color: #000000;">$ /etc/init.d/apache2 restart</span></span><br /><span style="color: #008000;"><span style="color: #000000;">$ nginx -t -c /etc/nginx/nginx.conf<br /></span></span><span style="color: #008000;"><span style="color: #000000;">$ nginx -c /etc/nginx/nginx.conf</span></span> &amp;<br /><br />#open browser to browse the http://your_debian_host/ check your deploment</div>
<p>&nbsp;</p>
<p>this is very simple config, for the production enviroment, you should check the more doc to get the best suit for you.</p>
</ol>
<p>We get the perfectly 3-tiers infrastructure for our n-tiers-oriented application, but it compares to the nginx+nginx-mod_wsgi style may has little speed limitation, no benchmark data now, maybe someone can do a test to get the actual performance data.</p><img src="http://www.cnblogs.com/sharplife/aggbug/1424019.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/sharplife/archive/2009/03/28/1424019.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/sharplife/archive/2009/03/28/1424019.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56804/" target="_blank">微软追回23个域名所有权</a><span style="color:gray">(2010-02-10 10:22)</span><br/>· <a href="http://news.cnblogs.com/n/56803/" target="_blank">Yahoo 对 Google Buzz 的挑衅很不满：我们两年前就 Buzz 上了</a><span style="color:gray">(2010-02-10 10:19)</span><br/>· <a href="http://news.cnblogs.com/n/56802/" target="_blank">Google Buzz 第一时间上手体验，twitter + Facebook + Foursquare？</a><span style="color:gray">(2010-02-10 10:17)</span><br/>· <a href="http://news.cnblogs.com/n/56801/" target="_blank">微软发布13个安全补丁 平最高纪录</a><span style="color:gray">(2010-02-10 10:03)</span><br/>· <a href="http://news.cnblogs.com/n/56800/" target="_blank">Windows 7下MSN无法启动或报错解决方法</a><span style="color:gray">(2010-02-10 10:00)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56782/" target="_blank">2010年2月编程语言排行榜</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>CSSHttpRequest : cross domain ajax request for easy</title><link>http://www.cnblogs.com/sharplife/archive/2009/03/20/1417665.html</link><dc:creator>sharplife</dc:creator><author>sharplife</author><pubDate>Fri, 20 Mar 2009 05:57:00 GMT</pubDate><guid>http://www.cnblogs.com/sharplife/archive/2009/03/20/1417665.html</guid><description><![CDATA[<p>阅读: 170 评论: 1 作者: <a href="http://www.cnblogs.com/sharplife/" target="_blank">sharplife</a> 发表于 2009-03-20 13:57 <a href="http://www.cnblogs.com/sharplife/archive/2009/03/20/1417665.html" target="_blank">原文链接</a></p><p>异步http请求的跨域问题，google一下已经有好几种解决方案了，像是<a href="http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/">JSONP</a>、<a href="http://www.thomasfrank.se/sessionvars.html">window.name</a>等方式，没细看，感觉都挺麻烦的。</p>
<p>无意中看到一种借用<a href="http://nb.io">CSSHttpRequest</a>的方式（相对应于XmlHttpRequest），借助于web页面对css的请求无domain限制的原理，在server端将需要的数据编码成css方式返回给client，而client借助js来解码数据并执行相应操作，ok啦，简单、方便。<a href="http://nb.io">http://nb.io</a>地址可能是访问不了的，把文章贴出来(google)：</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_105731" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_105731').style.display='none'; document.getElementById('Code_Open_Image_105731').style.display='inline'; document.getElementById('Code_Open_Text_105731').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" height="16" width="11" /><img id="Code_Open_Image_105731" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_105731').style.display='none'; getElementById('Code_Closed_Image_105731').style.display='inline'; getElementById('Code_Closed_Text_105731').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" height="16" width="11" /><span id="Code_Closed_Text_105731" class="cnblogs_code_Collapse">nb.io</span><span id="Code_Open_Text_105731"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000;"> </span></span>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="GENERATOR" content="BLOCKNOTE.NET" />
<title></title>
<style><!--
BODY { FONT-FAMILY:Tahoma; FONT-SIZE:10pt }
P { FONT-FAMILY:Tahoma; FONT-SIZE:10pt }
DIV { FONT-FAMILY:Tahoma; FONT-SIZE:10pt }
TD { FONT-FAMILY:Tahoma; FONT-SIZE:10pt }
--></style>
<basefont face="Tahoma" size="2"></basefont><b>CSSHttpRequest is cross-domain AJAX using CSS.</b>
<ul>
<li><b>Cross-browser</b> &mdash;supports IE6+, Firefox 2+, Safari 3+, iPhone.</li>
<li><b>100% JavaScript</b> &mdash;no Flash required<b>.</b></li>
<li><b>Small</b> &mdash;2.4KB minified.</li>
</ul>
<p>Like JavaScript includes, this works because CSS is not subject to the <a href="http://en.wikipedia.org/wiki/Same_origin_policy">same-origin policy</a> that affects XMLHttpRequest. &nbsp;CSSHttpRequest functions similarly to <a href="http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/">JSONP</a> , and is limited to making GET requests. Unlike JSONP, untrusted third-party JavaScript cannot execute in the context of the calling page.</p>
<p>A request is invoked using the <span style="font-family: monospace; font-size: xx-small;">CSSHttpRequest.get(url, callback)</span> function:</p>
<div><span style="font-family: monospace;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CSSHttpRequest.get(</span></div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-family: monospace;">&nbsp;"<a href="http://www.nb.io/hacks/csshttprequest/hello-world">http://www.nb.io/hacks/csshttprequest/hello-world/</a>",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function(response) { alert(response); }</span></div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-family: monospace;">&nbsp;</span>&nbsp;&nbsp;&nbsp;<span style="font-family: monospace;">);</span></div>
<p>Data is encoded on the server into URI-encoded 2KB chunks and serialized into CSS rules with a modified <a href="http://en.wikipedia.org/wiki/Data:_URI_scheme"><span style="font-family: monospace; font-size: xx-small;">data:</span></a> URI scheme. The selector should be in the form <span style="font-family: monospace; font-size: xx-small;">#c&lt;N&gt;</span> , where N is an integer index in [0,]. The response is decoded and returned to the callback function as a string:</p>
<p><span style="font-family: monospace;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#c0 { background: url(data:,Hello%20World!); }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#c1 { background: url(data:,I&rsquo;m%20text%20encoded%20in%20CSS!); }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#c2 { background: url(data:,I%20like%20arts%20and%20crafts.); }</span></p>
<p>CSSHttpRequest * is open source under an <a href="http://en.wikipedia.org/wiki/Apache_License">Apache License</a> (Version 2.0).</p>
<blockquote>
<p>* Or as <a href="http://vedana.net/">Eric</a> refers to it, <b>AJACSS</b> (slightly more electro). * Or as <a href="http://vedana.net/">Eric refers</a> to it, <b>AJACSS</b> (slightly more electro).</p>
</blockquote>
<h3>Examples Examples.</h3>
<ul>
<li><a href="http://s.nb.io/_s/6.331797559388995419/csshttprequest/examples/hello-world.css"><b>Hello World</b></a></li>
<li><a href="http://s.nb.io/hacks/csshttprequest/lorem"><b>Lorem Ipsum</b></a></li>
<li><a href="http://s.nb.io/hacks/csshttprequest/time"><b>Time</b></a> (text)</li>
<li><a href="http://s.nb.io/hacks/csshttprequest/time-json"><b>Time</b></a> (JSON)</li>
<li><a href="http://s.nb.io/hacks/csshttprequest/flickr/tags/favorite"><b>Flickr tag search</b></a> (JSON)<span id="Code_Open_Text_105731"><span style="color: #000000;"><br /></span></span></li>
</ul>
</div>
<p>&nbsp;</p>
<p>源码在<a href="https://github.com/">github</a>上的下载地址：<a href="http://github.com/nbio/csshttprequest/tree/master">http://github.com/nbio/csshttprequest/tree/master</a>, 目前有Python/Ruby/PHP的server端实现（即编码功能），抽时间可以做一下其他实现，如.NET</p>
<p>&nbsp;</p><img src="http://www.cnblogs.com/sharplife/aggbug/1417665.html?type=1" width="1" height="1" alt=""/><p>评论: 1　<a href="http://www.cnblogs.com/sharplife/archive/2009/03/20/1417665.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/sharplife/archive/2009/03/20/1417665.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56804/" target="_blank">微软追回23个域名所有权</a><span style="color:gray">(2010-02-10 10:22)</span><br/>· <a href="http://news.cnblogs.com/n/56803/" target="_blank">Yahoo 对 Google Buzz 的挑衅很不满：我们两年前就 Buzz 上了</a><span style="color:gray">(2010-02-10 10:19)</span><br/>· <a href="http://news.cnblogs.com/n/56802/" target="_blank">Google Buzz 第一时间上手体验，twitter + Facebook + Foursquare？</a><span style="color:gray">(2010-02-10 10:17)</span><br/>· <a href="http://news.cnblogs.com/n/56801/" target="_blank">微软发布13个安全补丁 平最高纪录</a><span style="color:gray">(2010-02-10 10:03)</span><br/>· <a href="http://news.cnblogs.com/n/56800/" target="_blank">Windows 7下MSN无法启动或报错解决方法</a><span style="color:gray">(2010-02-10 10:00)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56782/" target="_blank">2010年2月编程语言排行榜</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>Pylons unicode document</title><link>http://www.cnblogs.com/sharplife/archive/2009/03/16/1413611.html</link><dc:creator>sharplife</dc:creator><author>sharplife</author><pubDate>Mon, 16 Mar 2009 09:32:00 GMT</pubDate><guid>http://www.cnblogs.com/sharplife/archive/2009/03/16/1413611.html</guid><description><![CDATA[<p>阅读: 77 评论: 0 作者: <a href="http://www.cnblogs.com/sharplife/" target="_blank">sharplife</a> 发表于 2009-03-16 17:32 <a href="http://www.cnblogs.com/sharplife/archive/2009/03/16/1413611.html" target="_blank">原文链接</a></p><p>参考Pylons下unicode介绍：<a href="http://wiki.pylonshq.com/display/pylonsdocs/Unicode">http://wiki.pylonshq.com/display/pylonsdocs/Unicode</a></p>
<div class="section">
<h2><a class="toc-backref" href="http://wiki.pylonshq.com/display/pylonsdocs/Unicode#id4" id="unicode-literals-in-python-source-code" name="unicode-literals-in-python-source-code">1.3&nbsp;&nbsp;&nbsp;Unicode Literals in Python Source Code</a></h2>
<p>In Python source code, Unicode literals are written as strings prefixed with
the 'u' or 'U' character:</p>
<table class="syntaxtable">
<tbody>
<tr>
<td class="linenos">
<pre>1<br />2</pre>
</td>
<td class="code">
<div class="syntax">
<pre><span class="gp">&gt;&gt;&gt; </span><span class="s">u'abcdefghijk'</span><br /><span class="gp">&gt;&gt;&gt; </span><span class="s">U'lmnopqrstuv'</span><br /></pre>
</div>
</td>
</tr>
</tbody>
</table>
<p>You can also use <tt class="docutils literal"><span class="pre">"</span></tt>, <tt class="docutils literal"><span class="pre">"""`</span></tt> or <tt class="docutils literal"><span class="pre">'''</span></tt> versions too. For example:</p>
<table class="syntaxtable">
<tbody>
<tr>
<td class="linenos">
<pre>1<br />2<br />3</pre>
</td>
<td class="code">
<div class="syntax">
<pre><span class="gp">&gt;&gt;&gt; </span><span class="s">u"""This</span><br /><span class="gp">... </span><span class="s">is a really long</span><br /><span class="gp">... </span><span class="s">Unicode string"""</span><br /></pre>
</div>
</td>
</tr>
</tbody>
</table>
<p>Specific code points can be written using the <tt class="docutils literal"><span class="pre">\u</span></tt> escape sequence, which is
followed by four hex digits giving the code point. If you use <tt class="docutils literal"><span class="pre">\U</span></tt> instead
you specify 8 hex digits instead of 4. Unicode literals can also use the same
escape sequences as 8-bit strings, including <tt class="docutils literal"><span class="pre">\x</span></tt>, but <tt class="docutils literal"><span class="pre">\x</span></tt> only takes two
hex digits so it can't express all the available code points. You can add
characters to Unicode strings using the <tt class="docutils literal"><span class="pre">unichr()</span></tt> built-in function and find
out what the ordinal is with <tt class="docutils literal"><span class="pre">ord()</span></tt>.</p>
<p>Here is an example demonstrating the different alternatives:</p>
<table class="syntaxtable">
<tbody>
<tr>
<td class="linenos">
<pre>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9</pre>
</td>
<td class="code">
<div class="syntax">
<pre><span class="gp">&gt;&gt;&gt; </span><span class="n">s</span> <span class="o">=</span> <span class="s">u"</span><span class="se">\x66\u0072\u0061\U0000006e</span><span class="s">"</span> <span class="o">+</span> <span class="nb">unichr</span><span class="p">(</span><span class="mi">231</span><span class="p">)</span> <span class="o">+</span> <span class="s">u"ais"</span><br /><span class="gp">&gt;&gt;&gt; </span><span class="c">#     ^^^^ two-digit hex escape</span><br /><span class="gp">&gt;&gt;&gt; </span><span class="c">#         ^^^^^^ four-digit Unicode escape</span><br /><span class="gp">&gt;&gt;&gt; </span><span class="c">#                     ^^^^^^^^^^ eight-digit Unicode escape</span><br /><span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">s</span><span class="p">:</span>  <span class="k">print</span> <span class="nb">ord</span><span class="p">(</span><span class="n">c</span><span class="p">),</span><br /><span class="go">...</span><br /><span class="go">97 102 114 97 110 231 97 105 115</span><br /><span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">s</span><br /><span class="go">fran&ccedil;ais</span><br /></pre>
</div>
</td>
</tr>
</tbody>
</table>
<p>Using escape sequences for code points greater than 127 is fine in small doses
but Python 2.4 and above support writing Unicode literals in any encoding as
long as you declare the encoding being used by including a special comment as
either the first or second line of the source file:</p>
<table class="syntaxtable">
<tbody>
<tr>
<td class="linenos">
<pre>1<br />2<br />3<br />4</pre>
</td>
<td class="code">
<div class="syntax">
<pre><span class="c">#!/usr/bin/env python</span><br /><span class="c"># -*- coding: latin-1 -*-</span><br /><span class="n">u</span> <span class="o">=</span> <span class="s">u'abcd&eacute;'</span><br /><span class="k">print</span> <span class="nb">ord</span><span class="p">(</span><span class="n">u</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span><br /></pre>
</div>
</td>
</tr>
</tbody>
</table>
<p>If you don't include such a comment, the default encoding used will be ASCII.
Versions of Python before 2.4 were Euro-centric and assumed Latin-1 as a
default encoding for string literals; in Python 2.4, characters greater than
127 still work but result in a warning. For example, the following program has
no encoding declaration:</p>
<table class="syntaxtable">
<tbody>
<tr>
<td class="linenos">
<pre>1<br />2<br />3</pre>
</td>
<td class="code">
<div class="syntax">
<pre><span class="c">#!/usr/bin/env python</span><br /><span class="n">u</span> <span class="o">=</span> <span class="s">u'abcd&eacute;'</span><br /><span class="k">print</span> <span class="nb">ord</span><span class="p">(</span><span class="n">u</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span><br /></pre>
</div>
</td>
</tr>
</tbody>
</table>
<p>When you run it with Python 2.4, it will output the following warning:</p>
<table class="syntaxtable">
<tbody>
<tr>
<td class="linenos">
<pre>1<br />2<br />3</pre>
</td>
<td class="code">
<div class="syntax">
<pre><span class="go">sys:1: DeprecationWarning: Non-ASCII character '\xe9' in file testas.py on line</span><br /><span class="go">2, but no encoding declared; see http://www.python.org/peps/pep-0263.html for de</span><br /><span class="go">tails</span><br /></pre>
</div>
</td>
</tr>
</tbody>
</table>
<p>and then the following output:</p>
<table class="syntaxtable">
<tbody>
<tr>
<td class="linenos">
<pre>1</pre>
</td>
<td class="code">
<div class="syntax">
<pre><span class="go">233</span><br /></pre>
</div>
</td>
</tr>
</tbody>
</table>
<p>For real world use it is recommended that you use the UTF-8 encoding for your
file but you must be sure that your text editor actually saves the file as
UTF-8 otherwise the Python interpreter will try to parse UTF-8 characters but
they will actually be stored as something else.</p>
<div class="note">
<p class="first admonition-title">Note</p>
<p class="last">Windows users who use the <a class="reference" href="http://www.scintilla.org/SciTE.html">SciTE</a>
editor can specify the encoding of their file from the menu using the
<tt class="docutils literal"><span class="pre">File-&gt;Encoding</span></tt>.</p>
</div>
<div class="note">
<p class="first admonition-title">Note</p>
<p class="last">If you are working with Unicode in detail you might also be interested in
the <tt class="docutils literal"><span class="pre">unicodedata</span></tt> module which can be used to find out Unicode properties
such as a character's name, category, numeric value and the like.</p>
<p class="last">&nbsp;</p>
<p class="last"><b><a class="toc-backref" href="http://wiki.pylonshq.com/display/pylonsdocs/Unicode#id7" id="applying-this-to-web-programming" name="applying-this-to-web-programming">2&nbsp;&nbsp;&nbsp;Applying this to Web Programming</a></b></p>
<p>So far we've seen how to use encoding in source files and seen how to decode
text to Unicode and encode it back to text. We've also seen that Unicode
objects can be manipulated in similar ways to strings and we've seen how to
perform input and output operations on files. Next we are going to look at how
best to use Unicode in a web app.</p>
<p>The main rule is this:</p>
<p><b>Your application should use Unicode for all strings internally, decoding any
input to Unicode as soon as it enters the application and encoding the Unicode
to UTF-8 or another encoding only on output.</b></p>
<p>If you fail to do this you will find that <tt class="docutils literal"><span class="pre">UnicodeDecodeError</span></tt> s will start
popping up in unexpected places when Unicode strings are used with normal 8-bit
strings because Python's default encoding is ASCII and it will try to decode
the text to ASCII and fail. It is always better to do any encoding or decoding
at the edges of your application otherwise you will end up patching lots of
different parts of your application unnecessarily as and when errors pop up.</p>
<p>Unless you have a very good reason not to it is wise to use UTF-8 as the
default encoding since it is so widely supported.</p>
<p>The second rule is:</p>
<p><b>Always test your application with characters above 127 and above 255 wherever
possible.</b></p>
<p>If you fail to do this you might think your application is working fine, but as
soon as your users do put in non-ASCII characters you will have problems.
Using arabic is always a good test and www.google.ae is a good source of sample
text.</p>
<p>The third rule is:</p>
<p><b>Always do any checking of a string for illegal characters once it's in the
form that will be used or stored, otherwise the illegal characters might be
disguised.</b></p>
<p>For example, let's say you have a content management system that takes a
Unicode filename, and you want to disallow paths with a '/' character. You
might write this code:</p>
<table class="syntaxtable">
<tbody>
<tr>
<td class="linenos">
<pre>1<br />2<br />3<br />4<br />5<br />6</pre>
</td>
<td class="code">
<div class="syntax">
<pre><span class="k">def</span> <span class="nf">read_file</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">encoding</span><span class="p">):</span><br />    <span class="k">if</span> <span class="s">'/'</span> <span class="ow">in</span> <span class="n">filename</span><span class="p">:</span><br />        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">"'/' not allowed in filenames"</span><span class="p">)</span><br />    <span class="n">unicode_name</span> <span class="o">=</span> <span class="n">filename</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="n">encoding</span><span class="p">)</span><br />    <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">unicode_name</span><span class="p">,</span> <span class="s">'r'</span><span class="p">)</span><br />    <span class="c"># ... return contents of file ...</span><br /></pre>
</div>
</td>
</tr>
</tbody>
</table>
<p>This is INCORRECT. If an attacker could specify the 'base64' encoding, they
could pass <tt class="docutils literal"><span class="pre">L2V0Yy9wYXNzd2Q=</span></tt> which is the base-64 encoded form of the string
<tt class="docutils literal"><span class="pre">'/etc/passwd'</span></tt> which is a file you clearly don't want an attacker to get
hold of.  The above code looks for <tt class="docutils literal"><span class="pre">/</span></tt> characters in the encoded form and
misses the dangerous character in the resulting decoded form.</p>
<p>Those are the three basic rules so now we will look at some of the places you
might want to perform Unicode decoding in a Pylons application.</p>
<p>&nbsp;</p>
</div>
</div><img src="http://www.cnblogs.com/sharplife/aggbug/1413611.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/sharplife/archive/2009/03/16/1413611.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/sharplife/archive/2009/03/16/1413611.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56804/" target="_blank">微软追回23个域名所有权</a><span style="color:gray">(2010-02-10 10:22)</span><br/>· <a href="http://news.cnblogs.com/n/56803/" target="_blank">Yahoo 对 Google Buzz 的挑衅很不满：我们两年前就 Buzz 上了</a><span style="color:gray">(2010-02-10 10:19)</span><br/>· <a href="http://news.cnblogs.com/n/56802/" target="_blank">Google Buzz 第一时间上手体验，twitter + Facebook + Foursquare？</a><span style="color:gray">(2010-02-10 10:17)</span><br/>· <a href="http://news.cnblogs.com/n/56801/" target="_blank">微软发布13个安全补丁 平最高纪录</a><span style="color:gray">(2010-02-10 10:03)</span><br/>· <a href="http://news.cnblogs.com/n/56800/" target="_blank">Windows 7下MSN无法启动或报错解决方法</a><span style="color:gray">(2010-02-10 10:00)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56782/" target="_blank">2010年2月编程语言排行榜</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>Python 2.x Unicode 简记</title><link>http://www.cnblogs.com/sharplife/archive/2009/03/07/1405614.html</link><dc:creator>sharplife</dc:creator><author>sharplife</author><pubDate>Sat, 07 Mar 2009 10:47:00 GMT</pubDate><guid>http://www.cnblogs.com/sharplife/archive/2009/03/07/1405614.html</guid><description><![CDATA[<p>阅读: 244 评论: 0 作者: <a href="http://www.cnblogs.com/sharplife/" target="_blank">sharplife</a> 发表于 2009-03-07 18:47 <a href="http://www.cnblogs.com/sharplife/archive/2009/03/07/1405614.html" target="_blank">原文链接</a></p><p><b><span style="font-size: medium;">1、Python &amp; Unicode (《<a href="http://www.woodpecker.org.cn/diveintopython/xml_processing/unicode.html">Dive into python</a>》)</span></b><span id="Code_Open_Text_181046" style="display: none"><span style="color: #000000;"><br /></span></span></p>
<h3 class="title">例&nbsp;9.13.&nbsp;unicode 介绍</h3>
<pre class="screen"><tt class="prompt">&gt;&gt;&gt; </tt><span class="userinput">s = u<span class="pystring">'Dive in'</span></span>            <a name="kgp.unicode.1.1"></a><img src="http://www.woodpecker.org.cn/diveintopython/images/callouts/1.png" alt="1" border="0" height="12" width="12" /><br /><tt class="prompt">&gt;&gt;&gt; </tt><span class="userinput">s</span><br /><span class="computeroutput">u'Dive in'</span><br /><tt class="prompt">&gt;&gt;&gt; </tt><span class="userinput"><span class="pykeyword">print</span> s</span>                   <a name="kgp.unicode.1.2"></a><img src="http://www.woodpecker.org.cn/diveintopython/images/callouts/2.png" alt="2" border="0" height="12" width="12" /><br /><span class="computeroutput">Dive in</span></pre>
<div class="calloutlist">
               
<table summary="Callout list" border="0">
<tbody>
<tr>
<td align="left" valign="top" width="12"><a href="http://www.woodpecker.org.cn/diveintopython/xml_processing/unicode.html#kgp.unicode.1.1"><img src="http://www.woodpecker.org.cn/diveintopython/images/callouts/1.png" alt="1" border="0" height="12" width="12" /></a> 
                     </td>
<td align="left" valign="top">为了创建一个 unicode 字符串而不是通常的 <span class="acronym">ASCII</span> 字符串，要在字符串前面加上字母 &ldquo;<span class="quote"><tt class="literal">u</tt></span>&rdquo;。注意这个特殊的字符串没有任何非 <span class="acronym">ASCII</span> 的字符。这样很好；unicode 是 <span class="acronym">ASCII</span> 的一个超集 (一个非常大的超集)，所以任何正常的 <span class="acronym">ASCII</span> 都可以以 unicode 形式保存起来。
                     </td>
</tr>
<tr>
<td align="left" valign="top" width="12"><a href="http://www.woodpecker.org.cn/diveintopython/xml_processing/unicode.html#kgp.unicode.1.2"><img src="http://www.woodpecker.org.cn/diveintopython/images/callouts/2.png" alt="2" border="0" height="12" width="12" /></a> 
                     </td>
<td align="left" valign="top"><span style="text-decoration: underline;"><b>在打印字符串时，<span class="application">Python</span> 试图将字符串转换为你的默认编码，通常是 <span class="acronym">ASCII</span> 。</b></span>(过会儿有更详细的说明。) 因为组成这个 unicode 字符串的字符都是 <span class="acronym">ASCII</span> 字符，打印结果与打印正常的 <span class="acronym">ASCII</span> 字符串是一样的；转换是无缝的，而且如果你没有注意到 <tt class="varname">s</tt> 是一个 unicode 字符串的话，你永远也不会注意到两者之间的差别。
                     </td>
</tr>
</tbody>
</table>
</div>
<div class="example"><a name="d0e24080"></a>
<h3 class="title">例&nbsp;9.14.&nbsp;存储非 <span class="acronym">ASCII</span> 字符
            </h3>
<pre class="screen"><tt class="prompt">&gt;&gt;&gt; </tt><span class="userinput">s = u<span class="pystring">'La Pe\xf1a'</span></span>         <a name="kgp.unicode.2.1"></a><img src="http://www.woodpecker.org.cn/diveintopython/images/callouts/1.png" alt="1" border="0" height="12" width="12" /><br /><tt class="prompt">&gt;&gt;&gt; </tt><span class="userinput"><span class="pykeyword">print</span> s</span>                   <a name="kgp.unicode.2.2"></a><img src="http://www.woodpecker.org.cn/diveintopython/images/callouts/2.png" alt="2" border="0" height="12" width="12" /><br /><span class="traceback">Traceback (innermost last):<br />  File "&lt;interactive input&gt;", line 1, in ?<br />UnicodeError: ASCII encoding error: ordinal not in range(128)</span><br /><tt class="prompt">&gt;&gt;&gt; </tt><span class="userinput"><span class="pykeyword">print</span> s.encode(<span class="pystring">'latin-1'</span>)</span> <a name="kgp.unicode.2.3"></a><img src="http://www.woodpecker.org.cn/diveintopython/images/callouts/3.png" alt="3" border="0" height="12" width="12" /><br /><span class="computeroutput">La Pe&ntilde;a</span></pre>
<div class="calloutlist">
               
<table summary="Callout list" border="0">
<tbody>
<tr>
<td align="left" valign="top" width="12"><a href="http://www.woodpecker.org.cn/diveintopython/xml_processing/unicode.html#kgp.unicode.2.1"><img src="http://www.woodpecker.org.cn/diveintopython/images/callouts/1.png" alt="1" border="0" height="12" width="12" /></a> 
                     </td>
<td align="left" valign="top">unicode 真正的优势，理所当然的是它保存非 <span class="acronym">ASCII</span> 字符的能力，例如西班牙语的 &ldquo;<span class="quote"><tt class="literal">&ntilde;</tt></span>&rdquo;(<tt class="literal">n</tt> 上带有一个波浪线)。用来表示波浪线 n 的 unicode 字符编码是十六进制的 <tt class="literal">0xf1</tt> (十进制的241)，你可以像这样输入：<tt class="literal">\xf1</tt>。
                     </td>
</tr>
<tr>
<td align="left" valign="top" width="12"><a href="http://www.woodpecker.org.cn/diveintopython/xml_processing/unicode.html#kgp.unicode.2.2"><img src="http://www.woodpecker.org.cn/diveintopython/images/callouts/2.png" alt="2" border="0" height="12" width="12" /></a> 
                     </td>
<td align="left" valign="top">还记得我说过 <tt class="function">print</tt> 函数会尝试将 unicode 字符串转换为 <span class="acronym">ASCII</span> 从而打印它吗？嗯，在这里将不会起作用，因为你的 unicode 字符串包含非 <span class="acronym">ASCII</span> 字符，所以 <span class="application">Python</span> 会引发 <tt class="errorname">UnicodeError</tt> 异常。
                     </td>
</tr>
<tr>
<td align="left" valign="top" width="12"><a href="http://www.woodpecker.org.cn/diveintopython/xml_processing/unicode.html#kgp.unicode.2.3"><img src="http://www.woodpecker.org.cn/diveintopython/images/callouts/3.png" alt="3" border="0" height="12" width="12" /></a> 
                     </td>
<td align="left" valign="top">这儿就是将 unicode 转换为其它编码模式起作用的地方。<tt class="varname">s</tt> 是一个 unicode 字符串，但 <tt class="function">print</tt> 只能打印正常的字符串。为了解决这个问题，我们调用 <tt class="function">encode</tt> 方法 (它可以用于每个 unicode 字符串) 将 unicode 字符串转换为指定编码模式的正常字符串。我们向此函数传入一个参数。在本例中，我们使用 <tt class="literal">latin-1</tt> (也叫 <tt class="literal">iso-8859-1</tt>)，它包括带波浪线的 n (然而缺省的 <span class="acronym">ASCII</span> 编码模式不包括，因为它只包含数值从 0 到 127 的字符)。
                     </td>
</tr>
</tbody>
</table>
</div>
</div>
<p><span style="font-size: small;">还记得我说过：需要从一个 unicode 得到一个正常字符串时，<span class="application">Python</span> 通常默认将 unicode 转换成 <span class="acronym">ASCII</span> 吗？嗯，这个默认编码模式是一个可以定制的选项。
         </span></p>
<div class="example"><a name="d0e24181"></a>
<h3 class="title">例&nbsp;9.15.&nbsp;<span style="text-decoration: underline;"><tt class="filename">sitecustomize.py</tt></span></h3>
<pre class="programlisting"><span class="pycomment"># sitecustomize.py                   </span><a name="kgp.unicode.3.1"></a><img src="http://www.woodpecker.org.cn/diveintopython/images/callouts/1.png" alt="1" border="0" height="12" width="12" /><br /><span class="pycomment"># this file can be anywhere in your Python path,</span><br /><span class="pycomment"># but it usually goes in ${pythondir}/lib/site-packages/</span><br /><span class="pykeyword">import</span> sys<br />sys.setdefaultencoding(<span class="pystring">'iso-8859-1'</span>) <a name="kgp.unicode.3.2"></a><img src="http://www.woodpecker.org.cn/diveintopython/images/callouts/2.png" alt="2" border="0" height="12" width="12" /><br /></pre>
<div class="calloutlist">
               
<table summary="Callout list" border="0">
<tbody>
<tr>
<td align="left" valign="top" width="12"><a href="http://www.woodpecker.org.cn/diveintopython/xml_processing/unicode.html#kgp.unicode.3.1"><img src="http://www.woodpecker.org.cn/diveintopython/images/callouts/1.png" alt="1" border="0" height="12" width="12" /></a> 
                     </td>
<td align="left" valign="top"><span style="text-decoration: underline;"><tt class="filename">sitecustomize.py</tt> 是一个特殊的脚本；<span class="application">Python</span> 会在启动的时候导入它，所以在其中的任何代码都将自动运行。就像注解中提到的那样，它可以放在任何地方 (只要 <tt class="literal">import</tt> 能够找到它)，但是通常它位于 <span class="application">Python</span> 的<tt class="filename">lib</tt><tt class="filename">site-packages</tt> 目录中。&nbsp;</span></td>
</tr>
<tr>
<td align="left" valign="top" width="12"><a href="http://www.woodpecker.org.cn/diveintopython/xml_processing/unicode.html#kgp.unicode.3.2"><img src="http://www.woodpecker.org.cn/diveintopython/images/callouts/2.png" alt="2" border="0" height="12" width="12" /></a> 
                     </td>
<td align="left" valign="top"><span style="text-decoration: underline;">嗯，<tt class="function">setdefaultencoding</tt> 函数设置默认编码。<span class="application">Python</span> 会在任何需要将 unicode 字符串自动转换为正规字符串的地方，使用这个编码模式。
                     </span></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="example"><a name="d0e24221"></a>
<h3 class="title">例&nbsp;9.16.&nbsp;设置默认编码的效果</h3>
<pre class="screen"><tt class="prompt">&gt;&gt;&gt; </tt><span class="userinput"><span class="pykeyword">import</span> sys</span><br /><tt class="prompt">&gt;&gt;&gt; </tt><span class="userinput">sys.getdefaultencoding()</span> <a name="kgp.unicode.4.1"></a><img src="http://www.woodpecker.org.cn/diveintopython/images/callouts/1.png" alt="1" border="0" height="12" width="12" /><br /><span class="computeroutput">'iso-8859-1'</span><br /><tt class="prompt">&gt;&gt;&gt; </tt><span class="userinput">s = u<span class="pystring">'La Pe\xf1a'</span></span><br /><tt class="prompt">&gt;&gt;&gt; </tt><span class="userinput"><span class="pykeyword">print</span> s</span>                  <a name="kgp.unicode.4.2"></a><img src="http://www.woodpecker.org.cn/diveintopython/images/callouts/2.png" alt="2" border="0" height="12" width="12" /><br /><span class="computeroutput">La Pe&ntilde;a</span></pre>
<div class="calloutlist">
               
<table summary="Callout list" border="0">
<tbody>
<tr>
<td align="left" valign="top" width="12"><a href="http://www.woodpecker.org.cn/diveintopython/xml_processing/unicode.html#kgp.unicode.4.1"><img src="http://www.woodpecker.org.cn/diveintopython/images/callouts/1.png" alt="1" border="0" height="12" width="12" /></a> 
                     </td>
<td align="left" valign="top">这个例子假设你已经按前一个例子中的改动对 <tt class="filename">sitecustomize.py</tt> 文件做了修改，并且已经重启了 <span class="application">Python</span>。如果你的默认编码还是 <tt class="literal">'ascii'</tt>，可能你就没有正确设置 <tt class="filename">sitecustomize.py</tt> 文件，或者是没有重新启动 <span class="application">Python</span>。默认的编码只能在 <span class="application">Python</span> 启动的时候改变；之后就不能改变了。(由于一些我们现在不会仔细研究的古怪的编程技巧，你甚至不能在 <span class="application">Python</span> 启动之后调用 <tt class="function">sys.setdefaultencoding</tt> 函数。仔细研究 <tt class="filename">site.py</tt>，并搜索 &ldquo;<span class="quote"><tt class="literal">setdefaultencoding</tt></span>&rdquo; 去发现为什么吧。)
                     </td>
</tr>
<tr>
<td align="left" valign="top" width="12"><a href="http://www.woodpecker.org.cn/diveintopython/xml_processing/unicode.html#kgp.unicode.4.2"><img src="http://www.woodpecker.org.cn/diveintopython/images/callouts/2.png" alt="2" border="0" height="12" width="12" /></a> 
                     </td>
<td align="left" valign="top">现在默认的编码模式已经包含了你在字符串中使用的所有字符，<span class="application">Python</span> 对字符串的自动强制转换和打印就不存在问题了。
                     </td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="example"><a name="d0e24296"></a>
<h3 class="title">例&nbsp;9.17.&nbsp;<span style="text-decoration: underline;">指定<tt class="filename">.py</tt>文件的编码</span>
            </h3>
<p><span style="font-size: small;">如果你打算在你的 <span class="application">Python</span> 代码中保存非 <span class="acronym">ASCII</span> 字符串，你需要在每个文件的顶端加入编码声明来指定每个 <span class="filename">.py</span> 文件的编码。这个声明定义了 <span class="filename">.py</span> 文件的编码为 UTF-8：
            </span></p>
<pre class="programlisting"><span class="pycomment">#!/usr/bin/env python</span><br /><span class="pycomment"># -*- coding: UTF-8 -*-</span><br /></pre>
</div>
<p><span style="font-size: small;">现在，想想 <span class="acronym">XML</span> 中的编码应该是怎样的呢？不错，每一个 <span class="acronym">XML</span> 文档都有指定的编码。重复一下，ISO-8859-1 是西欧语言存放数据的流行编码方式。KOI8-R 是俄语流行的编码方式。编码――如果指定了的话――都在 <span class="acronym">XML</span> 文档的首部。 <br /></span></p>
<p><span style="font-size: small;"></span></p>
<p><b><span style="font-size: medium;">2、Python正则表达式</span></b></p>
<p><span style="font-size: small;">有了上面的基础，实践一个小应用问题的解决，用python正则表达式取匹配串（当然包含中文了）</span></p>
<p><span style="font-size: small;">仅英文情况下（ASCII），下面的代码是可以的，test.py（文件编码为默认）</span></p>
<p><span style="font-size: small;">
<div class="cnblogs_code"><img id="Code_Closed_Image_183433" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_183433').style.display='none'; document.getElementById('Code_Open_Image_183433').style.display='inline'; document.getElementById('Code_Open_Text_183433').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" height="16" width="11" /><img id="Code_Open_Image_183433" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_183433').style.display='none'; getElementById('Code_Closed_Image_183433').style.display='inline'; getElementById('Code_Closed_Text_183433').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" height="16" width="11" /><span id="Code_Closed_Text_183433" class="cnblogs_code_Collapse">Code</span><span id="Code_Open_Text_183433"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF;">import</span><span style="color: #000000;">&nbsp;re<br />p</span><span style="color: #000000;">=</span><span style="color: #000000;">r</span><span style="color: #800000;">'</span><span style="color: #800000;">\$([^\$\s]+)</span><span style="color: #800000;">'</span><span style="color: #000000;"><br />s</span><span style="color: #000000;">=</span><span style="color: #000000;">u</span><span style="color: #800000;">'</span><span style="color: #800000;">dsd$dd$111</span><span style="color: #800000;">'</span><span style="color: #000000;"><br />m</span><span style="color: #000000;">=</span><span style="color: #000000;">re.findall(p,s)<br /></span><span style="color: #0000FF;">print</span><span style="color: #000000;">&nbsp;m<br /><br />output:&nbsp;[u</span><span style="color: #800000;">'</span><span style="color: #800000;">dd</span><span style="color: #800000;">'</span><span style="color: #000000;">,&nbsp;u</span><span style="color: #800000;">'</span><span style="color: #800000;">111</span><span style="color: #800000;">'</span><span style="color: #000000;">]</span></span></div>
<br /></span></p>
<p><span style="font-size: small;">当字符串s中有中文时，须如下方可，test1.py(文件编码也是utf-8)</span><br /><span style="font-size: small;">
<div class="cnblogs_code"><img id="Code_Closed_Image_183613" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_183613').style.display='none'; document.getElementById('Code_Open_Image_183613').style.display='inline'; document.getElementById('Code_Open_Text_183613').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" height="16" width="11" /><img id="Code_Open_Image_183613" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_183613').style.display='none'; getElementById('Code_Closed_Image_183613').style.display='inline'; getElementById('Code_Closed_Text_183613').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" height="16" width="11" /><span id="Code_Closed_Text_183613" class="cnblogs_code_Collapse">Code</span><span id="Code_Open_Text_183613"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000;">#</span><span style="color: #008000;">!/usr/bin/python</span><span style="color: #008000;"><br />#</span><span style="color: #008000;">&nbsp;-*-&nbsp;coding:utf-8&nbsp;-*-</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br /></span><span style="color: #0000FF;">import</span><span style="color: #000000;">&nbsp;re<br />p</span><span style="color: #000000;">=</span><span style="color: #000000;">r</span><span style="color: #800000;">'</span><span style="color: #800000;">\$([^\$\s]+)</span><span style="color: #800000;">'</span><span style="color: #000000;"><br />s</span><span style="color: #000000;">=</span><span style="color: #000000;">u</span><span style="color: #800000;">'</span><span style="color: #800000;">dsd$哈哈哈$大苏打</span><span style="color: #800000;">'</span><span style="color: #000000;"><br />m</span><span style="color: #000000;">=</span><span style="color: #000000;">re.findall(p,s)<br /></span><span style="color: #0000FF;">print</span><span style="color: #000000;">&nbsp;m<br /><br /># output:&nbsp;[u</span><span style="color: #800000;">'</span><span style="color: #800000;">\u4f60\u7684\u601d\u5ff5</span><span style="color: #800000;">'</span><span style="color: #000000;">,&nbsp;u</span><span style="color: #800000;">'</span><span style="color: #800000;">\u5927\u82cf\u6253\u6492</span><span style="color: #800000;">'</span><span style="color: #000000;">] <br />#没显示成中文缘于win cmd对unicode的支持，下面的方式可以令其显示中文<br /><br />for i in m:<br />&nbsp;&nbsp;&nbsp; print i.encode('GBK') <br /># output：你的思念&nbsp; </span></span><span style="font-size: small;"><span id="Code_Open_Text_183613"><span style="color: #800000;">大苏打<br /></span></span></span><span style="font-size: small;"><span id="Code_Open_Text_183613"><span style="color: #000000;"># cmd shell支持gbk，且上述中文字符有属于gbk范围<br /># 若encode成utf-8 cmd显示亦是乱码，但输出给web页面肯定没问题，因为浏览器支持utf-8啊<br /></span></span></span></div>
</span></p>
<p><a href="http://tailorcai.javaeye.com/blog/192748">具体中文字符的匹配示例</a>：</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_184129" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_184129').style.display='none'; document.getElementById('Code_Open_Image_184129').style.display='inline'; document.getElementById('Code_Open_Text_184129').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" height="16" width="11" /><img id="Code_Open_Image_184129" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_184129').style.display='none'; getElementById('Code_Closed_Image_184129').style.display='inline'; getElementById('Code_Closed_Text_184129').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" height="16" width="11" /><span id="Code_Closed_Text_184129" class="cnblogs_code_Collapse">Code</span><span id="Code_Open_Text_184129" style="display: none"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000;"><br /></span><span style="color: #000000;">2008</span><span style="color: #000000;">-</span><span style="color: #000000;">05</span><span style="color: #000000;">-</span><span style="color: #000000;">13</span><span style="color: #000000;"><br />python&nbsp;正则表达式匹配中文utf8<br />Java代码<br /><br />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">.&nbsp;</span><span style="color: #000000;">&gt;&gt;&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">import</span><span style="color: #000000;">&nbsp;re&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">.&nbsp;</span><span style="color: #000000;">&gt;&gt;&gt;</span><span style="color: #000000;">&nbsp;x&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;u</span><span style="color: #800000;">'</span><span style="color: #800000;">中国</span><span style="color: #800000;">'</span><span style="color: #000000;">.encode(</span><span style="color: #800000;">'</span><span style="color: #800000;">utf8</span><span style="color: #800000;">'</span><span style="color: #000000;">)&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">3</span><span style="color: #000000;">.&nbsp;</span><span style="color: #000000;">&gt;&gt;&gt;</span><span style="color: #000000;">&nbsp;s&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;x.</span><span style="color: #800080;">__repr__</span><span style="color: #000000;">()&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">4</span><span style="color: #000000;">.&nbsp;</span><span style="color: #000000;">&gt;&gt;&gt;</span><span style="color: #000000;">&nbsp;s&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">5</span><span style="color: #000000;">.&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">'\\xc3\\x96\\xc3\\x90\\xc2\\xb9\\xc3\\xba'</span><span style="color: #800000;">"</span><span style="color: #000000;">&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">6</span><span style="color: #000000;">.&nbsp;</span><span style="color: #000000;">&gt;&gt;&gt;</span><span style="color: #000000;">&nbsp;pattern&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">.*%s.*</span><span style="color: #800000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">%</span><span style="color: #000000;">&nbsp;s[</span><span style="color: #000000;">1</span><span style="color: #000000;">:</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">]&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">7</span><span style="color: #000000;">.&nbsp;</span><span style="color: #000000;">&gt;&gt;&gt;</span><span style="color: #000000;">&nbsp;pattern&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">8</span><span style="color: #000000;">.&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">.*\\xc3\\x96\\xc3\\x90\\xc2\\xb9\\xc3\\xba.*</span><span style="color: #800000;">'</span><span style="color: #000000;">&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">9</span><span style="color: #000000;">.&nbsp;</span><span style="color: #000000;">&gt;&gt;&gt;</span><span style="color: #000000;">&nbsp;r&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;re.match(pattern,u</span><span style="color: #800000;">'</span><span style="color: #800000;">我是中国人</span><span style="color: #800000;">'</span><span style="color: #000000;">.encode(</span><span style="color: #800000;">'</span><span style="color: #800000;">utf8</span><span style="color: #800000;">'</span><span style="color: #000000;">))&nbsp;&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #000000;">10</span><span style="color: #000000;">.&nbsp;</span><span style="color: #000000;">&gt;&gt;&gt;</span><span style="color: #000000;">&nbsp;r&nbsp;&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #000000;">11</span><span style="color: #000000;">.&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">_sre.SRE_Match&nbsp;object&nbsp;at&nbsp;</span><span style="color: #000000;">0x012A52C0</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #000000;">12</span><span style="color: #000000;">.&nbsp;</span><span style="color: #000000;">&gt;&gt;&gt;</span><span style="color: #000000;">&nbsp;dir(r)&nbsp;&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #000000;">13</span><span style="color: #000000;">.&nbsp;[</span><span style="color: #800000;">'</span><span style="color: #800000;">__copy__</span><span style="color: #800000;">'</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">__deepcopy__</span><span style="color: #800000;">'</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">end</span><span style="color: #800000;">'</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">expand</span><span style="color: #800000;">'</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">group</span><span style="color: #800000;">'</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">groupdict</span><span style="color: #800000;">'</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">groups</span><span style="color: #800000;">'</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">span</span><span style="color: #800000;">'</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">start</span><span style="color: #800000;">'</span><span style="color: #000000;">]&nbsp;&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #000000;">14</span><span style="color: #000000;">.&nbsp;</span><span style="color: #000000;">&gt;&gt;&gt;</span><span style="color: #000000;">&nbsp;r.group()&nbsp;&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #000000;">15</span><span style="color: #000000;">.&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">\xc3\x8e\xc3\x92\xc3\x8a\xc3\x87\xc3\x96\xc3\x90\xc2\xb9\xc3\xba\xc3\x88\xc3\x8b</span><span style="color: #800000;">'</span><span style="color: #000000;">&nbsp;&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #000000;">16</span><span style="color: #000000;">.&nbsp;</span><span style="color: #000000;">&gt;&gt;&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span></span></div>
<p>&nbsp;</p>
<p>当然也可以在pattern串中用\u声明具体中文（或其他文）字符，不采用上述的方式（unicode-&gt;utf-8）</p>
<p>相关python unicode i/o参见这篇文章<a href="http://bakey1985.blogspot.com/2009/01/python-unicode-io.html">http://bakey1985.blogspot.com/2009/01/python-unicode-io.html</a></p>
<p><span style="font-size: small;"></span></p>
<p><span style="font-size: medium;"><b>3、Python web 开发</b></span></p>
<p><span style="font-size: small;">用python的web framework进行web开发时，同样需要考虑编码问题，统一编码（python sys、所有文件编码、code文件内的编码声明）避免n多问题</span></p>
<p><span style="font-size: small;">python2.x下对unicode的支持，至少需要你对其有基本的了解方容易解决问题，当然不能跟java、c#相比了，毕竟是从非unicode发展过来的。</span></p>
<p><span style="font-size: small;"><br /></span></p>
<p><span id="Code_Open_Text_181046" style="display: none"><span style="color: #000000;">unicode&nbsp;介绍<br /><br />&gt;&gt;&gt;&nbsp;s&nbsp;=&nbsp;u'Dive&nbsp;in'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br />&gt;&gt;&gt;&nbsp;s<br />u'Dive&nbsp;in'<br />&gt;&gt;&gt;&nbsp;print&nbsp;s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2<br />Dive&nbsp;in<br /><br />1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为了创建一个&nbsp;unicode&nbsp;字符串而不是通常的&nbsp;ASCII&nbsp;字符串，要在字符串前面加上字母&nbsp;&ldquo;u&rdquo;。注意这个特殊的字符串没有任何非&nbsp;ASCII&nbsp;的字符。这样很好；unicode&nbsp;是&nbsp;ASCII&nbsp;的一个超集&nbsp;(一个非常大的超集)，所以任何正常的&nbsp;ASCII&nbsp;都可以以&nbsp;unicode&nbsp;形式保存起来。<br />2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在打印字符串时，Python&nbsp;试图将字符串转换为你的默认编码，通常是&nbsp;ASCII&nbsp;。(过会儿有更详细的说明。)&nbsp;因为组成这个&nbsp;unicode&nbsp;字符串的字符都是&nbsp;ASCII&nbsp;字符，打印结果与打印正常的&nbsp;ASCII&nbsp;字符串是一样的；转换是无缝的，而且如果你没有注意到&nbsp;s&nbsp;是一个&nbsp;unicode&nbsp;字符串的话，你永远也不会注意到两者之间的差别。<br />例&nbsp;9.14.&nbsp;存储非&nbsp;ASCII&nbsp;字符<br /><br />&gt;&gt;&gt;&nbsp;s&nbsp;=&nbsp;u'La&nbsp;Pe\xf1a'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br />&gt;&gt;&gt;&nbsp;print&nbsp;s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2<br />Traceback&nbsp;(innermost&nbsp;last):<br />&nbsp;&nbsp;File&nbsp;"</span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">interactive&nbsp;</span><span style="color: #FF0000;">input</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">",&nbsp;line&nbsp;1,&nbsp;in&nbsp;?<br />UnicodeError:&nbsp;ASCII&nbsp;encoding&nbsp;error:&nbsp;ordinal&nbsp;not&nbsp;in&nbsp;range(128)<br />&gt;&gt;&gt;&nbsp;print&nbsp;s.encode('latin-1')&nbsp;3<br />La&nbsp;Pe&ntilde;a<br /><br />1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unicode&nbsp;真正的优势，理所当然的是它保存非&nbsp;ASCII&nbsp;字符的能力，例如西班牙语的&nbsp;&ldquo;&ntilde;&rdquo;(n&nbsp;上带有一个波浪线)。用来表示波浪线&nbsp;n&nbsp;的&nbsp;unicode&nbsp;字符编码是十六进制的&nbsp;0xf1&nbsp;(十进制的241)，你可以像这样输入：\xf1。<br />2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;还记得我说过&nbsp;print&nbsp;函数会尝试将&nbsp;unicode&nbsp;字符串转换为&nbsp;ASCII&nbsp;从而打印它吗？嗯，在这里将不会起作用，因为你的&nbsp;unicode&nbsp;字符串包含非&nbsp;ASCII&nbsp;字符，所以&nbsp;Python&nbsp;会引发&nbsp;UnicodeError&nbsp;异常。<br />3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这儿就是将&nbsp;unicode&nbsp;转换为其它编码模式起作用的地方。s&nbsp;是一个&nbsp;unicode&nbsp;字符串，但&nbsp;print&nbsp;只能打印正常的字符串。为了解决这个问题，我们调用&nbsp;encode&nbsp;方法&nbsp;(它可以用于每个&nbsp;unicode&nbsp;字符串)&nbsp;将&nbsp;unicode&nbsp;字符串转换为指定编码模式的正常字符串。我们向此函数传入一个参数。在本例中，我们使用&nbsp;latin-1&nbsp;(也叫&nbsp;iso-8859-1)，它包括带波浪线的&nbsp;n&nbsp;(然而缺省的&nbsp;ASCII&nbsp;编码模式不包括，因为它只包含数值从&nbsp;0&nbsp;到&nbsp;127&nbsp;的字符)。<br /><br />还记得我说过：需要从一个&nbsp;unicode&nbsp;得到一个正常字符串时，Python&nbsp;通常默认将&nbsp;unicode&nbsp;转换成&nbsp;ASCII&nbsp;吗？嗯，这个默认编码模式是一个可以定制的选项。<br />例&nbsp;9.15.&nbsp;sitecustomize.py<br /><br />#&nbsp;sitecustomize.py&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br />#&nbsp;this&nbsp;file&nbsp;can&nbsp;be&nbsp;anywhere&nbsp;in&nbsp;your&nbsp;Python&nbsp;path,<br />#&nbsp;but&nbsp;it&nbsp;usually&nbsp;goes&nbsp;in&nbsp;${pythondir}/lib/site-packages/<br />import&nbsp;sys<br />sys.setdefaultencoding('iso-8859-1')&nbsp;2<br /><br />1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sitecustomize.py&nbsp;是一个特殊的脚本；Python&nbsp;会在启动的时候导入它，所以在其中的任何代码都将自动运行。就像注解中提到的那样，它可以放在任何地方&nbsp;(只要&nbsp;import&nbsp;能够找到它)，但是通常它位于&nbsp;Python&nbsp;的lib&nbsp;目录的&nbsp;site-packages&nbsp;目录中。<br />2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;嗯，setdefaultencoding&nbsp;函数设置默认编码。Python&nbsp;会在任何需要将&nbsp;unicode&nbsp;字符串自动转换为正规字符串的地方，使用这个编码模式。<br />例&nbsp;9.16.&nbsp;设置默认编码的效果<br /><br />&gt;&gt;&gt;&nbsp;import&nbsp;sys<br />&gt;&gt;&gt;&nbsp;sys.getdefaultencoding()&nbsp;1<br />'iso-8859-1'<br />&gt;&gt;&gt;&nbsp;s&nbsp;=&nbsp;u'La&nbsp;Pe\xf1a'<br />&gt;&gt;&gt;&nbsp;print&nbsp;s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2<br />La&nbsp;Pe&ntilde;a<br /><br />1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个例子假设你已经按前一个例子中的改动对&nbsp;sitecustomize.py&nbsp;文件做了修改，并且已经重启了&nbsp;Python。如果你的默认编码还是&nbsp;'ascii'，可能你就没有正确设置&nbsp;sitecustomize.py&nbsp;文件，或者是没有重新启动&nbsp;Python。默认的编码只能在&nbsp;Python&nbsp;启动的时候改变；之后就不能改变了。(由于一些我们现在不会仔细研究的古怪的编程技巧，你甚至不能在&nbsp;Python&nbsp;启动之后调用&nbsp;sys.setdefaultencoding&nbsp;函数。仔细研究&nbsp;site.py，并搜索&nbsp;&ldquo;setdefaultencoding&rdquo;&nbsp;去发现为什么吧。)<br />2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;现在默认的编码模式已经包含了你在字符串中使用的所有字符，Python&nbsp;对字符串的自动强制转换和打印就不存在问题了。<br />例&nbsp;9.17.&nbsp;指定.py文件的编码<br /><br />如果你打算在你的&nbsp;Python&nbsp;代码中保存非&nbsp;ASCII&nbsp;字符串，你需要在每个文件的顶端加入编码声明来指定每个&nbsp;.py&nbsp;文件的编码。这个声明定义了&nbsp;.py&nbsp;文件的编码为&nbsp;UTF-8：<br /><br />#!/usr/bin/env&nbsp;python<br />#&nbsp;-*-&nbsp;coding:&nbsp;UTF-8&nbsp;-*-<br /><br />现在，想想&nbsp;XML&nbsp;中的编码应该是怎样的呢？不错，每一个&nbsp;XML&nbsp;文档都有指定的编码。重复一下，ISO-8859-1&nbsp;是西欧语言存放数据的流行编码方式。KOI8-R&nbsp;是俄语流行的编码方式。编码――如果指定了的话――都在&nbsp;XML&nbsp;文档的首部。<br /></span></span></p><img src="http://www.cnblogs.com/sharplife/aggbug/1405614.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/sharplife/archive/2009/03/07/1405614.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/sharplife/archive/2009/03/07/1405614.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56804/" target="_blank">微软追回23个域名所有权</a><span style="color:gray">(2010-02-10 10:22)</span><br/>· <a href="http://news.cnblogs.com/n/56803/" target="_blank">Yahoo 对 Google Buzz 的挑衅很不满：我们两年前就 Buzz 上了</a><span style="color:gray">(2010-02-10 10:19)</span><br/>· <a href="http://news.cnblogs.com/n/56802/" target="_blank">Google Buzz 第一时间上手体验，twitter + Facebook + Foursquare？</a><span style="color:gray">(2010-02-10 10:17)</span><br/>· <a href="http://news.cnblogs.com/n/56801/" target="_blank">微软发布13个安全补丁 平最高纪录</a><span style="color:gray">(2010-02-10 10:03)</span><br/>· <a href="http://news.cnblogs.com/n/56800/" target="_blank">Windows 7下MSN无法启动或报错解决方法</a><span style="color:gray">(2010-02-10 10:00)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56782/" target="_blank">2010年2月编程语言排行榜</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>TurboGears 2.0 beta6 安装</title><link>http://www.cnblogs.com/sharplife/archive/2009/03/06/1404818.html</link><dc:creator>sharplife</dc:creator><author>sharplife</author><pubDate>Fri, 06 Mar 2009 09:28:00 GMT</pubDate><guid>http://www.cnblogs.com/sharplife/archive/2009/03/06/1404818.html</guid><description><![CDATA[<p>阅读: 184 评论: 0 作者: <a href="http://www.cnblogs.com/sharplife/" target="_blank">sharplife</a> 发表于 2009-03-06 17:28 <a href="http://www.cnblogs.com/sharplife/archive/2009/03/06/1404818.html" target="_blank">原文链接</a></p><p>TG2b6看来又更改发布哲学了，部分包被分出去了，需要单独的easy_install，折腾了我好几小时。</p>
<p>文档（<a href="http://turbogears.org/2.0/docs/main/DownloadInstall.html">http://turbogears.org/2.0/docs/main/DownloadInstall.html</a>）似乎还未更新成能装b6，安装步骤如下：</p>
<ul>
<li>安装python2.5+，setuptools，mysql...</li>
<li>为保安全，装virtual enviro，&gt; easy_install virtualenv</li>
<li>创建虚拟环境tg2env，&gt; virtualenv --no-site-packages tg2env</li>
<li>activate tg2env</li>
<li>&gt; <b>easy_install -i http://turbogears.org/2.0/downloads/2.0b6/index/ tg.devtools </b></li>
<li>安装过程中缺少任何包，直接easy_install，再运行上述命令，直至成功</li>
<li>成功后paster quickstart建立的首个项目，在paster serve时同样报少catwalk等包，再easy_install装之</li>
<li>一切ok了</li>
</ul>
<p>&nbsp;</p><img src="http://www.cnblogs.com/sharplife/aggbug/1404818.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/sharplife/archive/2009/03/06/1404818.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/sharplife/archive/2009/03/06/1404818.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56804/" target="_blank">微软追回23个域名所有权</a><span style="color:gray">(2010-02-10 10:22)</span><br/>· <a href="http://news.cnblogs.com/n/56803/" target="_blank">Yahoo 对 Google Buzz 的挑衅很不满：我们两年前就 Buzz 上了</a><span style="color:gray">(2010-02-10 10:19)</span><br/>· <a href="http://news.cnblogs.com/n/56802/" target="_blank">Google Buzz 第一时间上手体验，twitter + Facebook + Foursquare？</a><span style="color:gray">(2010-02-10 10:17)</span><br/>· <a href="http://news.cnblogs.com/n/56801/" target="_blank">微软发布13个安全补丁 平最高纪录</a><span style="color:gray">(2010-02-10 10:03)</span><br/>· <a href="http://news.cnblogs.com/n/56800/" target="_blank">Windows 7下MSN无法启动或报错解决方法</a><span style="color:gray">(2010-02-10 10:00)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56782/" target="_blank">2010年2月编程语言排行榜</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>严冬</title><link>http://www.cnblogs.com/sharplife/archive/2008/12/03/1347073.html</link><dc:creator>sharplife</dc:creator><author>sharplife</author><pubDate>Wed, 03 Dec 2008 13:55:00 GMT</pubDate><guid>http://www.cnblogs.com/sharplife/archive/2008/12/03/1347073.html</guid><description><![CDATA[<p>阅读: 50 评论: 1 作者: <a href="http://www.cnblogs.com/sharplife/" target="_blank">sharplife</a> 发表于 2008-12-03 21:55 <a href="http://www.cnblogs.com/sharplife/archive/2008/12/03/1347073.html" target="_blank">原文链接</a></p><p>要走了，离开MCS了，离开这帮或远认或近识的朋友，离开这帮曾帮助和鼓励过我的朋友，既然选择了就不再怀疑，还是应该首先祝你们你们这帮朋友以后的工作、生活能够顺心、开心，早日实现自己的愿望，今晚的我有点迷糊，或许因为我这个人比较简单吧，而我就喜欢什么东西都是原来的样子，原本简单就不必描述的复杂，不说其他的，短暂的3、4个月，从当初的初来咋到，到工作的融入，到被同事、领导的认可，到现在固执的离去，工作和生活中其实都可以找到真心的朋友，在此算是留下一点痕迹吧，祝福你们今后的日子</p>
<p>各个工作生活环境都有其不足，或许也不少其亮点，不必在意太多，努力工作、好好生活吧，拥有自己的目标，无论在哪里，为了自己、为了关心你的人，多付出些吧...</p><img src="http://www.cnblogs.com/sharplife/aggbug/1347073.html?type=1" width="1" height="1" alt=""/><p>评论: 1　<a href="http://www.cnblogs.com/sharplife/archive/2008/12/03/1347073.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/sharplife/archive/2008/12/03/1347073.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56804/" target="_blank">微软追回23个域名所有权</a><span style="color:gray">(2010-02-10 10:22)</span><br/>· <a href="http://news.cnblogs.com/n/56803/" target="_blank">Yahoo 对 Google Buzz 的挑衅很不满：我们两年前就 Buzz 上了</a><span style="color:gray">(2010-02-10 10:19)</span><br/>· <a href="http://news.cnblogs.com/n/56802/" target="_blank">Google Buzz 第一时间上手体验，twitter + Facebook + Foursquare？</a><span style="color:gray">(2010-02-10 10:17)</span><br/>· <a href="http://news.cnblogs.com/n/56801/" target="_blank">微软发布13个安全补丁 平最高纪录</a><span style="color:gray">(2010-02-10 10:03)</span><br/>· <a href="http://news.cnblogs.com/n/56800/" target="_blank">Windows 7下MSN无法启动或报错解决方法</a><span style="color:gray">(2010-02-10 10:00)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56782/" target="_blank">2010年2月编程语言排行榜</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>感受危机</title><link>http://www.cnblogs.com/sharplife/archive/2008/12/02/1346307.html</link><dc:creator>sharplife</dc:creator><author>sharplife</author><pubDate>Tue, 02 Dec 2008 15:06:00 GMT</pubDate><guid>http://www.cnblogs.com/sharplife/archive/2008/12/02/1346307.html</guid><description><![CDATA[<p>阅读: 59 评论: 1 作者: <a href="http://www.cnblogs.com/sharplife/" target="_blank">sharplife</a> 发表于 2008-12-02 23:06 <a href="http://www.cnblogs.com/sharplife/archive/2008/12/02/1346307.html" target="_blank">原文链接</a></p><p>站在北京站广场上，听着班得瑞-尽管得不到安静，其实北京站还没有中关村吵的厉害，中关村可以其他地方的火车站相较上下</p>
<p>看着电子广告牌上划过的，全是打折机票的信息，北京-长春往返150、北京-南京200、北京-合肥400...没有银行的大片倒闭，同样让我们感受金融危机的到来，危机是应该让人的心更平静、还是更兴奋呐</p>
<p>这次回来的车上，竟然能一觉睡到天亮，真是感谢上苍</p><img src="http://www.cnblogs.com/sharplife/aggbug/1346307.html?type=1" width="1" height="1" alt=""/><p>评论: 1　<a href="http://www.cnblogs.com/sharplife/archive/2008/12/02/1346307.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/sharplife/archive/2008/12/02/1346307.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56804/" target="_blank">微软追回23个域名所有权</a><span style="color:gray">(2010-02-10 10:22)</span><br/>· <a href="http://news.cnblogs.com/n/56803/" target="_blank">Yahoo 对 Google Buzz 的挑衅很不满：我们两年前就 Buzz 上了</a><span style="color:gray">(2010-02-10 10:19)</span><br/>· <a href="http://news.cnblogs.com/n/56802/" target="_blank">Google Buzz 第一时间上手体验，twitter + Facebook + Foursquare？</a><span style="color:gray">(2010-02-10 10:17)</span><br/>· <a href="http://news.cnblogs.com/n/56801/" target="_blank">微软发布13个安全补丁 平最高纪录</a><span style="color:gray">(2010-02-10 10:03)</span><br/>· <a href="http://news.cnblogs.com/n/56800/" target="_blank">Windows 7下MSN无法启动或报错解决方法</a><span style="color:gray">(2010-02-10 10:00)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56782/" target="_blank">2010年2月编程语言排行榜</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>这就是生活了</title><link>http://www.cnblogs.com/sharplife/archive/2008/11/04/1326592.html</link><dc:creator>sharplife</dc:creator><author>sharplife</author><pubDate>Tue, 04 Nov 2008 11:15:00 GMT</pubDate><guid>http://www.cnblogs.com/sharplife/archive/2008/11/04/1326592.html</guid><description><![CDATA[<p>阅读: 67 评论: 0 作者: <a href="http://www.cnblogs.com/sharplife/" target="_blank">sharplife</a> 发表于 2008-11-04 19:15 <a href="http://www.cnblogs.com/sharplife/archive/2008/11/04/1326592.html" target="_blank">原文链接</a></p><p>好快，眼瞅11月份了，还是回家务农好奥</p>
<p>这几天太暖和，有点不正常，还是冷些的好，不然又要薄衣服厚衣服的换了</p>
<p>.....</p><img src="http://www.cnblogs.com/sharplife/aggbug/1326592.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/sharplife/archive/2008/11/04/1326592.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/sharplife/archive/2008/11/04/1326592.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56804/" target="_blank">微软追回23个域名所有权</a><span style="color:gray">(2010-02-10 10:22)</span><br/>· <a href="http://news.cnblogs.com/n/56803/" target="_blank">Yahoo 对 Google Buzz 的挑衅很不满：我们两年前就 Buzz 上了</a><span style="color:gray">(2010-02-10 10:19)</span><br/>· <a href="http://news.cnblogs.com/n/56802/" target="_blank">Google Buzz 第一时间上手体验，twitter + Facebook + Foursquare？</a><span style="color:gray">(2010-02-10 10:17)</span><br/>· <a href="http://news.cnblogs.com/n/56801/" target="_blank">微软发布13个安全补丁 平最高纪录</a><span style="color:gray">(2010-02-10 10:03)</span><br/>· <a href="http://news.cnblogs.com/n/56800/" target="_blank">Windows 7下MSN无法启动或报错解决方法</a><span style="color:gray">(2010-02-10 10:00)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56782/" target="_blank">2010年2月编程语言排行榜</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>汉字及英文字符的ascii表示</title><link>http://www.cnblogs.com/sharplife/archive/2008/10/24/1318430.html</link><dc:creator>sharplife</dc:creator><author>sharplife</author><pubDate>Fri, 24 Oct 2008 00:29:00 GMT</pubDate><guid>http://www.cnblogs.com/sharplife/archive/2008/10/24/1318430.html</guid><description><![CDATA[<p>阅读: 1259 评论: 2 作者: <a href="http://www.cnblogs.com/sharplife/" target="_blank">sharplife</a> 发表于 2008-10-24 08:29 <a href="http://www.cnblogs.com/sharplife/archive/2008/10/24/1318430.html" target="_blank">原文链接</a></p><p><strong>注：<br /></strong></p>
<p><strong>dephi的string，可以表示成一个char型数组，而char行和byte可以互转，如&ldquo;你好&rdquo;，这个string在dephi的string中length为4（是实际的字节数），即四个char或者说四个byte，所以dephi可以直接遍历整个string取得各个字节</strong></p>
<p><strong>c#的string，也可以表示成一个char型数组，但此char和串length和dephi不是一个概念，因为c# string不是按字节计算的，所以遍历string中各个字节的方法就是 System.Text.Encoding.Default.GetBytes方法</strong></p>
<p>&nbsp;</p>
<p>[转]http://blog.csdn.net/xiaozhao_19/archive/2008/03/05/2152087.aspx</p>
<p>1)汉字交换码(国标码) 汉字交换码(国标码)主要用于汉字信息交换。
</p>
<p>　　国标码：以国家标准局1980年颁布的《信息交换用汉字编码字符集"基本集》(代号为GB2312
80)规定的汉字交换码作为国家标准汉字编码。 GB2312 80中共有7445个字符符号： 汉字符号6763个
一级汉字3755个(按汉语拼音字母顺序排列) 二级汉字3008个(按部首笔划顺序排列) 非汉字符号682个 GB2312
80规定，所有的国标码汉字及符号组成一个94
94的方阵。在此方阵中，每一行称为一个"区"，每一列称为一个"位"。这个方阵实际上组成一个有94个区(编号由01到94)，每个区有94个位(编号
由01到94)的汉字字符集。
一个汉字所在的区号和位号的组合就构成了该汉字的"区位码"。其中，高两位为区号，低两位为位号。这样区位码可以唯一地确定某一汉字或字符;反之，任何一
个汉字或符号都对应一个唯一的区位码，没有重码。</p>
<p>　　区位码分布情况如下：</p>
<p>　　区 号 内 容 1区 键盘上没有的各种符号 2区 各种序号 3区 键盘上的各种符号(按中文方式给出) 4 -5区 日文字母 6区
希腊字母 7区 俄文字母 8区 标识拼音声调的母音及拼音字母名称 9区 制表符号 10- 15区 未用 16-55区
一级汉字(按拼音字母顺序排列) 56- 87区 二级汉字(按部首笔划顺序排列) 88- 94区 自定义汉字</p>
<p>　　由上可以看出，所有汉字与符号的94个区，可以分为四个组：</p>
<p>　　①1 -15区：为图形符号区。其中1 9区为标准符号区;10 15区为自定义符号区。</p>
<p>　　②16 -55区：为一级汉字区，包含3755个汉字。这些区中的汉字按汉语拼音顺序排序，同音字按笔画顺序列出。</p>
<p>　　③56 -87区：为二级汉字区，包含3008个汉字。这些区中的汉字是按部首笔划顺序排序的。</p>
<p>　　④88 -94区：为自定义汉字区。</p>
<p>　　国标码规定，每个汉字(包括非汉字的一些符号)由2字节代码表示。每个字节的最高位为0，只使用低7位，而低7位的编码中又有34个适用于控制
用的，这样每个字节只有27 - 34 =
94个编码用于汉字。2个字节就有94X94=8836个汉字编码。在表示一个汉字的2个字节中，高字节对应编码表中的行号，称为区号;低字节对应编码表
中的列号，称为位号。</p>
<p>　　汉字国标码的范围用二进制表示是： 00100001 00100001 01111110 01111110 (1+32)10
(1+32)10 (94+32)10 (94+32)10 7 位ASCII码是128个字符组成的字符集。其中编码值0 31(00000000
00011111)不对应任何印刷字符，通常称为控制符，用于计算机通信中的通信控制或对计算机设备的功能控制。编码值32(00100000)是空格字
符SP。编码值127(1111111)是删除字符DEL。</p>
<p>　　汉字国标码的起始二进制位置选择00100001即(33)10是为了跳过ASCII码的32个控制字符和空格字符。所以，汉字国标码的高位和
低位分别比对应的区位码大(32)10或(00100000)2或(20)H，即： 国标码高位 = 区码 + 20H (H表示十六进制)
国标码低位 = 位码 + 20H</p>
<p>　　2) 汉字机内码(内码)(汉字存储码)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; GB2312(1980年)一共收录了7445个字符，包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7，低字节从A1-FE，占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。</p>
<p>　　汉字机内码(内码)(汉字存储码)的作用是统一了各种不同的汉字输入码在计算机内部的表示。
为了将汉字的各种输入码在计算机内部统一起来，就有了专用于计算机内部存储汉字使用的汉字机内码，用以将输入时使用的多种汉字输入码统一转换成汉字机内码
进行存储，以方便机内的汉字处理
汉字机内码是在计算机内部存储、处理的代码。计算机既要处理汉字，又要处理英文。因此计算机必须能区别汉字字符和英文字符。英文字符的的机内码是最高为为
0的8位ASCII码。为了不与7位ASCII码发生冲突，把国标码每个字节的最高位由0改为1，其余位不变的编码作为汉字字符的机内码。</p>
<p>　　汉字机内码的范围用二进制表示是： 10100001 10100001 11111110 11111110
机内码的高位和低位比对应的国标码的高位和低位大(128)10或(10000000)2或(80)H 即： 机内码高位 = 国标码高位 + 80H
机内码低位 = 国标码低位 + 80H 又因为： 国标码高位 = 区码 + 20H 国标码低位 = 位码 + 20H 所以： 机内码高位 =
区码 + A0H 机内码低位 = 位码 + A0H
也就是说，机内码高位和机内码低位分别比对应的区码和位码大(160)10或(10100000)2或 (A0)H
例如：汉字"啊"的区位码为"1601"，其中区码为(16)10或(10)H，位码为(01)10或(01)H。 则： 机内码高位 = 10H +
A0H = B0H 机内码低位 = 01H + A0H = A1H 所以： 机内码= B0A1H</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void btnBrowser_Click(object sender, EventArgs e)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string s = tbCharOrString.Text;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string st = string.Empty;<br /><span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] array = System.Text.Encoding.Default.GetBytes(s);</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; array.Length; i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> if (array[i] &gt;= 128 &amp;&amp; array[i] &lt;= 247)&nbsp;&nbsp;</span>&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /><span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; st =st+System.Text.Encoding.Default.GetString(array, i, 2);</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; st = st + string.Format(" 高字节:{0},低字节:{1}"+Environment.NewLine , array[i], array[i + 1]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /><span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; st =st+ System.Text.Encoding.Default.GetString(array, i,1);</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; st = st + string.Format(" ASCII:{0}" + Environment.NewLine, array[i]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tbResult.Text = st;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;</p>
<p>演示界面如下图:</p>
<p><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/xiaozhao_19/ascii.bmp" alt="" /></p><img src="http://www.cnblogs.com/sharplife/aggbug/1318430.html?type=1" width="1" height="1" alt=""/><p>评论: 2　<a href="http://www.cnblogs.com/sharplife/archive/2008/10/24/1318430.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/sharplife/archive/2008/10/24/1318430.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56804/" target="_blank">微软追回23个域名所有权</a><span style="color:gray">(2010-02-10 10:22)</span><br/>· <a href="http://news.cnblogs.com/n/56803/" target="_blank">Yahoo 对 Google Buzz 的挑衅很不满：我们两年前就 Buzz 上了</a><span style="color:gray">(2010-02-10 10:19)</span><br/>· <a href="http://news.cnblogs.com/n/56802/" target="_blank">Google Buzz 第一时间上手体验，twitter + Facebook + Foursquare？</a><span style="color:gray">(2010-02-10 10:17)</span><br/>· <a href="http://news.cnblogs.com/n/56801/" target="_blank">微软发布13个安全补丁 平最高纪录</a><span style="color:gray">(2010-02-10 10:03)</span><br/>· <a href="http://news.cnblogs.com/n/56800/" target="_blank">Windows 7下MSN无法启动或报错解决方法</a><span style="color:gray">(2010-02-10 10:00)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56782/" target="_blank">2010年2月编程语言排行榜</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item></channel></rss>