﻿<?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>语源科技BlogJava-backup2007</title><link>http://www.blogjava.net/sodar-fish/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 09:55:39 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 09:55:39 GMT</pubDate><ttl>60</ttl><item><title>我所理解的IE内存泄露</title><link>http://www.blogjava.net/sodar-fish/archive/2009/02/12/254324.html</link><dc:creator>backup2007</dc:creator><author>backup2007</author><pubDate>Wed, 11 Feb 2009 20:40:00 GMT</pubDate><guid>http://www.blogjava.net/sodar-fish/archive/2009/02/12/254324.html</guid><wfw:comment>http://www.blogjava.net/sodar-fish/comments/254324.html</wfw:comment><comments>http://www.blogjava.net/sodar-fish/archive/2009/02/12/254324.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sodar-fish/comments/commentRss/254324.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sodar-fish/services/trackbacks/254324.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 我所理解的IE内存泄露&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最近在做一些web方面的东西,突然发现IE...&nbsp;&nbsp;<a href='http://www.blogjava.net/sodar-fish/archive/2009/02/12/254324.html'>阅读全文</a><img src ="http://www.blogjava.net/sodar-fish/aggbug/254324.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sodar-fish/" target="_blank">backup2007</a> 2009-02-12 04:40 <a href="http://www.blogjava.net/sodar-fish/archive/2009/02/12/254324.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编码问题3转</title><link>http://www.blogjava.net/sodar-fish/articles/175934.html</link><dc:creator>backup2007</dc:creator><author>backup2007</author><pubDate>Thu, 17 Jan 2008 06:34:00 GMT</pubDate><guid>http://www.blogjava.net/sodar-fish/articles/175934.html</guid><wfw:comment>http://www.blogjava.net/sodar-fish/comments/175934.html</wfw:comment><comments>http://www.blogjava.net/sodar-fish/articles/175934.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sodar-fish/comments/commentRss/175934.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sodar-fish/services/trackbacks/175934.html</trackback:ping><description><![CDATA[<p>世界上的各地区都有本地的语言。地区差异直接导致了语言环境的差异。在开发一个国际化程序的过程中，处理语言问题就显得很重要了。</p>
<p>　　这是一个世界范围内都存在的问题，所以，Java提供了世界性的解决方法。本文描述的方法是用于处理<nobr><strong onclick='javascript:window.open("http://pagead2.googlesyndication.com/pagead/iclk?sa=l&ai=BaKKHkvaOR5fdLImmvwPkuclb-57_LZu_ydMCwI23AaDvDxACGAIgrYXQDSgUOABQl8OSyQFgnbnagcgFqgEKMjAwMDAzNzU0MbIBD3d3dy5rbm93c2t5LmNvbcgBAdoBIGh0dHA6Ly93d3cua25vd3NreS5jb20vNTM1Mi5odG1sqQL675iowY2CPsgC35HqA6gDAegDrQLoAx_oA7wD6AMg6AO0Aw&num=2&adurl=http://www.kalan-fence.com&client=ca-pub-5186439242807756");GgKwClickStat("中文","www.kalan-fence.com","afc","2000037541");' onmouseout='isShowGg = false;InTextAds_GgLayer="_u4E2D_u6587"' onmouseover='isShowAds = false;isShowAds2 = false;isShowGg = true;InTextAds_GgLayer="_u4E2D_u6587";KeyGate_ads.ShowGgAds(this,"_u4E2D_u6587",event)' style="border: 0px none ; margin: 0px; padding: 0px; color: #0000ff; font-weight: normal; text-decoration: underline;">中文</strong></nobr>的，但是，推而广之，对于处理世界上其它国家和地区的语言同样适用。</p>
<p>　　汉字是双字节的。所谓双字节是指一个双字要占用两个BYTE的位置（即16位），分别称为高位和低位。中国规定的汉字编码为GB2312，这是
强制性的，目前几乎所有的能处理中文的应用程序都支持GB2312。GB2312包括了一二级汉字和9区符号，高位从0xa1到0xfe，低位也是从
0xa1到0xfe，其中，汉字的编码范围为0xb0a1到0xf7fe。</p>
<p>　　另外有一种编码，叫做GBK，但这是一份规范，不是强制的。GBK提供了20902个汉字，它兼容GB2312，编码范围为0x8140到0xfefe。GBK中的所有字符都可以一一映射到Unicode 2.0。</p>
<p>　　在不久的将来，中国会颁布另一种标准：GB18030-2000（GBK2K）。它收录了藏、蒙等少数民族的字型，从根本上解决了字位不足的问
题。注意：它不再是定长的。其二字节部份与GBK兼容，四字节部分是扩充的字符、字形。它的首字节和第三字节从0x81到0xfe，二字节和第四字节从
0x30到0x39。</p>
<p>　　本文不打算介绍Unicode，有兴趣的可以浏览&#8220;http://www.unicode.org/&#8221;查看更多的信息。Unicode有一个特
性：它包括了世界上所有的字符字形。所以，各个地区的语言都可以建立与Unicode的映射关系，而Java正是利用了这一点以达到异种语言之间的转换。</p>
<p>　　在JDK中，与中文相关的编码有：</p>
<p>　　表1　JDK中与中文相关的编码列表<br />
<table align="center" border="1" cellpadding="0" cellspacing="0" width="90%">
    <tbody>
        <tr>
            <td>编码名称</td>
            <td>说明</td>
        </tr>
        <tr>
            <td>ASCII</td>
            <td>7位，与ascii7相同</td>
        </tr>
        <tr>
            <td>ISO8859-1</td>
            <td>8-位，与 8859_1,ISO-8859-1,ISO_8859-1,latin1...等相同</td>
        </tr>
        <tr>
            <td>GB2312-80</td>
            <td>16位，与gb2312,gb2312-1980,EUC_CN,euccn,1381,Cp1381, 1383, Cp1383, ISO2022CN,ISO2022CN_GB...等相同</td>
        </tr>
        <tr>
            <td>GBK</td>
            <td>与MS936相同，注意：区分大小写</td>
        </tr>
        <tr>
            <td>UTF8</td>
            <td>与UTF-8相同</td>
        </tr>
        <tr>
            <td>GB18030</td>
            <td>与cp1392、1392相同，目前支持的JDK很少</td>
        </tr>
    </tbody>
</table>
</p>
<p>　　在实际编程时，接触得比较多的是GB2312（GBK）和ISO8859-1。</p>
<p>　　为什么会有&#8220;?&#8221;号</p>
<p>　　上文说过，异种语言之间的转换是通过Unicode来完成的。假设有两种不同的语言A和B，转换的步骤为：先把A转化为Unicode，再把Unicode转化为B。</p>
<p>　　举例说明。有GB2312中有一个汉字&#8220;李&#8221;，其编码为&#8220;C0EE&#8221;，欲转化为ISO8859-1编码。步骤为：先把&#8220;李&#8221;字转化为
Unicode，得到&#8220;674E&#8221;，再把&#8220;674E&#8221;转化为ISO8859-1字符。当然，这个映射不会成功，因为ISO8859-1中根本就没有与
&#8220;674E&#8221;对应的字符。</p>
<p>　　当映射不成功时，问题就发生了！当从某语言向Unicode转化时，如果在某语言中没有该字符，得到的将是Unicode的代码&#8220;"
uffffd&#8221;（&#8220;"u&#8221;表示是Unicode编码，）。而从Unicode向某语言转化时，如果某语言没有对应的字符，则得到的是&#8220;0x3f&#8221;
（&#8220;?&#8221;）。这就是&#8220;?&#8221;的由来。</p>
<p>　　例如：把字符流buf =&#8220;0x80 0x40 0xb0 0xa1&#8221;进行new String(buf,
"gb2312")操作，得到的结果是&#8220;"ufffd"u554a&#8221;，再println出来，得到的结果将是&#8220;?啊&#8221;，因为&#8220;0x80
0x40&#8221;是GBK中的字符，在GB2312中没有。</p>
<p>　　再如，把字符串String=""u00d6"u00ec"u00e9"u0046"u00bb"u00f9"进行new String
(buf.getBytes("GBK"))操作，得到的结果是&#8220;3fa8aca8a6463fa8b4&#8221;，其中，&#8220;"u00d6&#8221;在&#8220;GBK&#8221;中没有对
应的字符，得到&#8220;3f&#8221;，&#8220;"u00ec&#8221;对应着&#8220;a8ac&#8221;，&#8220;"u00e9&#8221;对应着&#8220;a8a6&#8221;，&#8220;0046&#8221;对应着&#8220;46&#8221;（因为这是ASCII字
符），&#8220;"u00bb&#8221;没找到，得到&#8220;3f&#8221;，最后，&#8220;"u00f9&#8221;对应着&#8220;a8b4&#8221;。把这个字符串println一下，得到的结果是&#8220;?&#236;&#233;F?
&#249;&#8221;。看到没？这里并不全是问号，因为GBK与Unicode映射的内容中除了汉字外还有字符，本例就是最好的明证。</p>
<p>　　所以，在汉字转码时，如果发生错乱，得到的不一定都是问号噢！不过，错了终究是错了，50步和100步并没有质的差别。</p>
<p>　　或者会问：如果源字符集中有，而Unicode中没有，结果会如何？回答是不知道。因为我手头没有能做这个测试的源字符集。但有一点是肯定的，那就是源字符集不够规范。在Java中，如果发生这种情况，是会抛出异常的。<br />
<br />
什么是UTF</p>
<p>　　UTF，是Unicode Text Format的缩写，意为Unicode文本格式。对于UTF，是这样定义的：</p>
<p>　　（1）如果Unicode的16位字符的头9位是0，则用一个字节表示，这个字节的首位是&#8220;0&#8221;，剩下的7位与原字符中的后7位相同，如&#8220;"
u0034&#8221;（0000 0000 0011 0100），用&#8220;34&#8221; (0011 0100)表示；（与源Unicode字符是相同的）；</p>
<p>　　（2）如果Unicode的16位字符的头5位是0，则用2个字节表示，首字节是&#8220;110&#8221;开头，后面的5位与源字符中除去头5个零后的最高5
位相同；第二个字节以&#8220;10&#8221;开头，后面的6位与源字符中的低6位相同。如&#8220;"u025d&#8221;（0000 0010 0101
1101），转化后为&#8220;c99d&#8221;（1100 1001 1001 1101）；</p>
<p>　　（3）如果不符合上述两个规则，则用三个字节表示。第一个字节以&#8220;1110&#8221;开头，后四位为源字符的高四位；第二个字节以&#8220;10&#8221;开头，后六位
为源字符中间的六位；第三个字节以&#8220;10&#8221;开头，后六位为源字符的低六位；如&#8220;"u9da7&#8221;（1001 1101 1010
0111），转化为&#8220;e9b6a7&#8221;（1110 1001 1011 0110 1010 0111）；</p>
<p>　　可以这么描述JAVA程序中Unicode与UTF的关系，虽然不绝对：字符串在内存中运行时，表现为Unicode代码，而当要保存到文件或其它介质中去时，用的是UTF。这个转化过程是由writeUTF和readUTF来完成的。</p>
<p>　　好了，基础性的论述差不多了，下面进入正题。</p>
<p>　　先把这个问题想成是一个黑匣子。先看黑匣子的一级表示：</p>
<p>input(charsetA)-&gt;process(Unicode)-&gt;output(charsetB)</p>
<p>　　简单，这就是一个IPO模型，即输入、处理和<nobr><strong onclick='javascript:window.open("http://pagead2.googlesyndication.com/pagead/iclk?sa=l&ai=BG8OIkvaOR5fdLImmvwPkuclb0u3BN4bEqvIDwI23AfDXHBAOGA4grYXQDSgUOABQiu2ni_z_____AWCdudqByAWqAQoyMDAwMDM3NTQxsgEPd3d3Lmtub3dza3kuY29tyAEB2gEgaHR0cDovL3d3dy5rbm93c2t5LmNvbS81MzUyLmh0bWypAvrvmKjBjYI-yAKSp8MDqAMB6AOtAugDH-gDvAPoAyDoA7QD&num=14&adurl=http://www.jian-da.com/Product.asp%3FAction%3DView%26ProductID%3D34%26Catalog%3D6&client=ca-pub-5186439242807756");GgKwClickStat("输出","www.jian-da.com","afc","2000037541");' onmouseout='isShowGg = false;InTextAds_GgLayer="_u8F93_u51FA"' onmouseover='isShowAds = false;isShowAds2 = false;isShowGg = true;InTextAds_GgLayer="_u8F93_u51FA";KeyGate_ads.ShowGgAds(this,"_u8F93_u51FA",event)' style="border: 0px none ; margin: 0px; padding: 0px; color: #0000ff; font-weight: normal; text-decoration: underline;">输出</strong></nobr>。同样的内容要经过&#8220;从charsetA到unicode再到charsetB&#8221;的转化。</p>
<p>　　再看二级表示：</p>
<p>SourceFile(jsp,java)-&gt;class-&gt;output</p>
<p>　　在这个图中，可以看出，输入的是jsp和java源文件，在处理过程中，以Class文件为载体，然后输出。再细化到三级表示：</p>
<p>jsp-&gt;temp file-&gt;class-&gt;browser,os console,db</p>
<p>app,servlet-&gt;class-&gt;browser,os console,db</p>
<p>　　这个图就更明白了。Jsp文件先生成中间的Java文件，再生成Class。而Servlet和普通App则直接编译生成Class。然后，从Class再输出到浏览器、控制台或<nobr><strong onclick='javascript:window.open("http://pagead2.googlesyndication.com/pagead/iclk?sa=l&ai=BMkWFkvaOR5fdLImmvwPkuclbpJvfJcjHp-gCwI23AfDXHBAIGAggrYXQDSgUOABQ9ofu4v3_____AWCdudqByAWqAQoyMDAwMDM3NTQxsgEPd3d3Lmtub3dza3kuY29tyAEB2gEgaHR0cDovL3d3dy5rbm93c2t5LmNvbS81MzUyLmh0bWypAvrvmKjBjYI-yAK8yqsBqAMB6AOtAugDH-gDvAPoAyDoA7QD&num=8&adurl=http://www.dewetron.com/cn/products/dynamic-signal-analyzer&client=ca-pub-5186439242807756");GgKwClickStat("数据库","www.dewetron.com/cn","afc","2000037541");' onmouseout='isShowGg = false;InTextAds_GgLayer="_u6570_u636E_u5E93"' onmouseover='isShowAds = false;isShowAds2 = false;isShowGg = true;InTextAds_GgLayer="_u6570_u636E_u5E93";KeyGate_ads.ShowGgAds(this,"_u6570_u636E_u5E93",event)' style="border: 0px none ; margin: 0px; padding: 0px; color: #0000ff; font-weight: normal; text-decoration: underline;">数据库</strong></nobr>等。</p>
<p>　　JSP：从源文件到Class的过程</p>
<p>　　Jsp的源文件是以&#8220;.jsp&#8221;结尾的文本文件。在本节中，将阐述JSP文件的解释和编译过程，并跟踪其中的中文变化。</p>
<p>　　1、JSP/Servlet引擎提供的JSP转换工具（jspc）搜索JSP文件中用&lt;%@ page contentType
="text/html;
charset=&lt;Jsp-charset&gt;"%&gt;中指定的charset。如果在JSP文件中未指定&lt;Jsp-
charset&gt;，则取JVM中的默认设置file.encoding，一般情况下，这个值是ISO8859-1；</p>
<p>　　2、jspc用相当于&#8220;javac &#8211;encoding
&lt;Jsp-charset&gt;&#8221;的命令解释JSP文件中出现的所有字符，包括中文字符和ASCII字符，然后把这些字符转换成Unicode字
符，再转化成UTF格式，存为JAVA文件。ASCII码字符转化为Unicode字符时只是简单地在前面加&#8220;00&#8221;，如&#8220;A&#8221;，转化为&#8220;"u0041&#8221;
（不需要理由，Unicode的码表就是这么编的）。然后，经过到UTF的转换，又变回&#8220;41&#8221;了！这也就是可以使用普通文本编辑器查看由JSP生成的
JAVA文件的原因；</p>
<p>　　3、引擎用相当于&#8220;javac &#8211;encoding UNICODE&#8221;的命令，把JAVA文件编译成CLASS文件；</p>
<p>　　先看一下这些过程中中文字符的转换情况。有如下源代码：</p>
<p>&lt;%@ page contentType="text/html; charset=gb2312"%&gt;<br />
&lt;html&gt;&lt;body&gt;<br />
&lt;%<br />
String a="中文";<br />
out.println(a);<br />
%&gt;<br />
&lt;/body&gt;&lt;/html&gt; </p>
<p>　　这段代码是在UltraEdit for Windows上编写的。保存后，&#8220;中文&#8221;两个字的16进制编码为&#8220;D6 D0 CE
C4&#8221;（GB2312编码）。经查表，&#8220;中文&#8221;两字的Unicode编码为&#8220;"u4E2D"u6587&#8221;，用 UTF表示就是&#8220;E4 B8 AD E6
96 87&#8221;。打开引擎生成的由JSP文件转变而成的JAVA文件，发现其中的&#8220;中文&#8221;两个字确实被&#8220;E4 B8 AD E6 96
87&#8221;替代了，再查看由JAVA文件编译生成的CLASS文件，发现结果与JAVA文件中的完全一样。</p>
<p>　　再看JSP中指定的CharSet为ISO-8859-1的情况。</p>
<p>&lt;%@ page contentType="text/html; charset=ISO-8859-1"%&gt;<br />
&lt;html&gt;&lt;body&gt;<br />
&lt;%<br />
String a="中文";<br />
out.println(a);<br />
%&gt;<br />
&lt;/body&gt;&lt;/html&gt; </p>
<p>　　同样，该文件是用UltraEdit编写的，&#8220;中文&#8221;这两个字也是存为GB2312编码&#8220;D6 D0 CE
C4&#8221;。先模拟一下生成的JAVA文件和CLASS文件的过程：jspc用ISO-8859-1来解释&#8220;中文&#8221;，并把它映射到Unicode。由于ISO
-8859-1是8位的，且是拉丁语系，其映射规则就是在每个字节前加&#8220;00&#8221;，所以，映射后的Unicode编码应为&#8220;"u00D6"u00D0"
u00CE"u00C4&#8221;，转化成UTF后应该是&#8220;C3 96 C3 90 C3 8E C3
84&#8221;。好，打开文件看一下，JAVA文件和CLASS文件中，&#8220;中文&#8221;果然都表示为&#8220;C3 96 C3 90 C3 8E C3 84&#8221;。</p>
<p>　　如果上述代码中不指定&lt;Jsp-charset&gt;，即把第一行写成&#8220;&lt;%@ page
contentType="text/html" %&gt;&#8221;，JSPC会使用file.encoding的设置来解释JSP文件。在RedHat
6.2上，其处理结果与指定为ISO-8859-1是完全相同的。</p>
<p>　　到现在为止，已经解释了从JSP文件到CLASS文件的转变过程中中文字符的映射过程。一句话：从&#8220;JspCharSet到Unicode再到UTF&#8221;。下表总结了这个过程：</p>
<p>　　表2　&#8220;中文&#8221;从JSP到CLASS的转化过程<br />
<table align="center" border="1" cellpadding="0" cellspacing="0" width="90%">
    <tbody>
        <tr>
            <td>Jsp-CharSet</td>
            <td>JSP文件中</td>
            <td>JAVA文件中</td>
            <td>CLASS文件中</td>
        </tr>
        <tr>
            <td>GB2312</td>
            <td>D6 D0 CE C4(GB2312)</td>
            <td>从"u4E2D"u6587(Unicode)到E4 B8 AD E6 96 87 (UTF)</td>
            <td>E4 B8 AD E6 96 87 (UTF)</td>
        </tr>
        <tr>
            <td>ISO-8859-1</td>
            <td>D6 D0 CE C4<br />
            (GB2312)</td>
            <td>从"u00D6"u00D0"u00CE"u00C4 (Unicode)到C3 96 C3 90 C3 8E C3 84 (UTF)</td>
            <td>C3 96 C3 90 C3 8E C3 84 (UTF)</td>
        </tr>
        <tr>
            <td>无（默认＝file.encoding）</td>
            <td>同ISO-8859-1</td>
            <td>同ISO-8859-1</td>
            <td>同ISO-8859-1</td>
        </tr>
    </tbody>
</table>
<br />
下节先讨论Servlet从JAVA文件到CLASS文件的转化过程，然后再解释从CLASS文件如何输出到客户端。之所以这样安排，是因为JSP和Servlet在输出时处理方法是一样的。</p>
<p>　　Servlet：从源文件到Class的过程</p>
<p>　　Servlet源文件是以&#8220;.java&#8221;结尾的文本文件。本节将讨论Servlet的编译过程并跟踪其中的中文变化。</p>
<p>　　用&#8220;javac&#8221;编译Servlet源文件。javac可以带&#8220;-encoding &lt;Compile-charset&gt;&#8221;参数，意思是&#8220;用&lt; Compile-charset &gt;中指定的编码来解释Serlvet源文件&#8221;。</p>
<p>　　源文件在编译时，用&lt;Compile-charset&gt;来解释所有字符，包括中文字符和ASCII字符。然后把字符常量转变成Unicode字符，最后，把Unicode转变成UTF。</p>
<p>　　在Servlet中，还有一个地方设置输出流的CharSet。通常在输出结果前，调用HttpServletResponse的
setContentType方法来达到与在JSP中设置&lt;Jsp-charset&gt;一样的效果，称之为&lt;Servlet-
charset&gt;。</p>
<p>　　注意，文中一共提到了三个变量：&lt;Jsp-charset&gt;、&lt;Compile-charset&gt;和&lt;
Servlet-charset&gt;。其中，JSP文件只与&lt;Jsp-charset&gt;有关，而&lt;Compile-
charset&gt;和&lt;Servlet-charset&gt;只与Servlet有关。</p>
<p>　　看下例：</p>
<p>import javax.servlet.*;</p>
<p>import javax.servlet.http.*;</p>
<p>class testServlet extends HttpServlet<br />
{<br />
public void doGet(HttpServletRequest req,HttpServletResponse resp)<br />
throws ServletException,java.io.IOException<br />
{<br />
resp.setContentType("text/html; charset=GB2312");<br />
java.io.PrintWriter out=resp.getWriter();<br />
out.println("&lt;html&gt;");<br />
out.println("#中文#");<br />
out.println("&lt;/html&gt;");<br />
}<br />
} </p>
<p>　　该文件也是用UltraEdit for Windows编写的，其中的&#8220;中文&#8221;两个字保存为&#8220;D6 D0 CE C4&#8221;（GB2312编码）。</p>
<p>　　开始编译。下表是&lt;Compile-charset&gt;不同时，CLASS文件中&#8220;中文&#8221;两字的十六进制码。在编译过程中，&lt;
Servlet-charset&gt;不起任何作用。&lt;Servlet-charset&gt;只对CLASS文件的输出产生影响，实际上是
&lt;Servlet-charset&gt;和&lt;Compile-charset&gt;一起，达到与JSP文件中的&lt;Jsp-
charset&gt;相同的效果，因为&lt;Jsp-charset&gt;对编译和CLASS文件的输出都会产生影响。</p>
<p>　　表3　&#8220;中文&#8221;从Servlet源文件到Class的转变过程<br />
<table align="center" border="1" cellpadding="0" cellspacing="0" width="90%">
    <tbody>
        <tr>
            <td>Compile-charset</td>
            <td>Servlet源文件中</td>
            <td>Class文件中</td>
            <td>等效的Unicode码</td>
        </tr>
        <tr>
            <td>GB2312</td>
            <td>D6 D0 CE C4 <br />
            (GB2312)</td>
            <td>E4 B8 AD E6 96 87 (UTF)</td>
            <td>"u4E2D"u6587 (在Unicode中＝&#8220;中文&#8221;)</td>
        </tr>
        <tr>
            <td>ISO-8859-1</td>
            <td>D6 D0 CE C4 <br />
            (GB2312)</td>
            <td>C3 96 C3 90 C3 8E C3 84 (UTF)</td>
            <td>"u00D6 "u00D0 "u00CE "u00C4 (在D6 D0 CE C4前面各加了一个00)</td>
        </tr>
        <tr>
            <td>无（默认）</td>
            <td>D6 D0 CE C4 (GB2312)</td>
            <td>同ISO-8859-1</td>
            <td>同ISO-8859-1</td>
        </tr>
    </tbody>
</table>
<br />
普通Java程序的编译过程与Servlet完全一样。<br />
<br />
CLASS文件中的中文表示法是不是昭然若揭了？OK，接下来看看CLASS又是怎样输出中文的呢？<br />
<br />
Class：输出字符串<br />
<br />
上文说过，字符串在内存中表现为Unicode编码。至于这种Unicode编码表示了什么，那要看它是从哪种字符集映射过来的，也就是说要看它的祖先。这好比在托运行李时，外观都是纸箱子，里面装了什么就要看寄邮件的人实际邮了什么东西。<br />
<br />
看看上面的例子，如果给一串Unicode编码&#8220;00D6 00D0 00CE
00C4&#8221;，如果不作转换，直接用Unicode码表来对照它时，是四个字符（而且是特殊字符）；假如把它与&#8220;ISO8859-1&#8221;进行映射，则直接去掉
前面的&#8220;00&#8221;即可得到&#8220;D6 D0 CE
C4&#8221;，这是ASCII码表中的四个字符；而假如把它当作GB2312来进行映射，得到的结果很可能是一大堆乱码，因为在GB2312中有可能没有（也有
可能有）字符与00D6等字符对应（如果对应不上，将得到0x3f，也就是问号，如果对应上了，由于00D6等字符太靠前，估计也是一些特殊符号，真正的
汉字在Unicode中的编码从4E00开始）。<br />
<br />
各位看到了，同样的Unicode字符，可以解释成不同的样子。当然，这其中有一种是我们期望的结果。以上例而论，&#8220;D6 D0 CE C4&#8221;应该是我们所想要的，当把&#8220;D6 D0 CE C4&#8221;输出到IE中时，用&#8220;<nobr><strong onclick='javascript:window.open("http://pagead2.googlesyndication.com/pagead/iclk?sa=l&ai=Bm3TWkvaOR5fdLImmvwPkuclblJvhLIT904kDwI23AaDvDxABGAEgrYXQDSgUOABQyO6KgAJgnbnagcgFqgEKMjAwMDAzNzU0MbIBD3d3dy5rbm93c2t5LmNvbcgBAdoBIGh0dHA6Ly93d3cua25vd3NreS5jb20vNTM1Mi5odG1sqQL675iowY2CPsgC7JWgBKgDAegDrQLoAx_oA7wD6AMg6AO0Aw&num=1&adurl=http://www.centn.com/hw_4.asp&client=ca-pub-5186439242807756");GgKwClickStat("简体中文","www.centn.com","afc","2000037541");' onmouseout='isShowGg = false;InTextAds_GgLayer="_u7B80_u4F53_u4E2D_u6587"' onmouseover='isShowAds = false;isShowAds2 = false;isShowGg = true;InTextAds_GgLayer="_u7B80_u4F53_u4E2D_u6587";KeyGate_ads.ShowGgAds(this,"_u7B80_u4F53_u4E2D_u6587",event)' style="border: 0px none ; margin: 0px; padding: 0px; color: #0000ff; font-weight: normal; text-decoration: underline;">简体中文</strong></nobr>&#8221;方式查看，就能看到清楚的&#8220;中文&#8221;两个字了。（当然了，如果你一定要用&#8220;西欧字符&#8221;来看，那也没办法，你将得不到任何有何时何地的东西）为什么呢？因为&#8220;00D6 00D0 00CE 00C4&#8221;本来就是由ISO8859-1转化过去的。<br />
<span><font size="3">　　给出如下结论：<br />
<br />
在Class输出字符串前，会将Unicode的字符串按照某一种内码重新生成字节流，然后把字节流输入，相当于进行了一步&#8220;String.getBytes(???)&#8221;操作。???代表某一种字符集。<br />
<br />
如果是Servlet，那么，这种内码就是在HttpServletResponse.setContentType()方法中指定的内码，也就是上文定义的＜Servlet-charset＞。<br />
<br />
如果是JSP，那么，这种内码就是在＜%@ page contentType=""%＞中指定的内码，也就是上文定义的＜Jsp-charset＞。<br />
<br />
如果是Java程序，那么，这种内码就是file.encoding中指定的内码，默认为ISO8859-1。<br />
<br />
当输出对象是浏览器时<br />
<br />
以流行的浏览器IE为例。IE支持多种内码。假如IE接收到了一个字节流&#8220;D6 D0 CE C4&#8221;，你可以尝试用各种内码去查看。你会发现用&#8220;简体中文&#8221;时能得到正确的结果。因为&#8220;D6 D0 CE C4&#8221;本来就是简体中文中&#8220;中文&#8221;两个字的编码。<br />
<br />
OK，完整地看一遍。<br />
<br />
JSP：源文件为GB2312格式的文本文件，且JSP源文件中有&#8220;中文&#8221;这两个汉字<br />
<br />
如果指定了＜Jsp-charset＞为GB2312，转化过程如下表。<br />
<br />
表4　Jsp-charset = GB2312时的变化过程<br />
<br />
</font>
<table align="center" border="1" cellpadding="0" cellspacing="0" width="90%">
    <tbody>
        <tr>
            <td width="8%">序号</td>
            <td width="65%">步骤说明</td>
            <td width="27%">结果</td>
        </tr>
        <tr>
            <td>1</td>
            <td>编写JSP源文件，且存为GB2312格式</td>
            <td>D6 D0 CE C4<br />
            （D6D0=中 CEC4=文）</td>
        </tr>
        <tr>
            <td>2</td>
            <td>jspc把JSP源文件转化为临时JAVA文件，并把字符串按照GB2312映射到Unicode，并用UTF格式写入JAVA文件中</td>
            <td>E4 B8 AD E6 96 87</td>
        </tr>
        <tr>
            <td>3</td>
            <td>把临时JAVA文件编译成CLASS文件</td>
            <td>E4 B8 AD E6 96 87</td>
        </tr>
        <tr>
            <td>4</td>
            <td>运行时，先从CLASS文件中用readUTF读出字符串，在内存中的是Unicode编码</td>
            <td>4E 2D 65 87（在Unicode中4E2D=中 6587=文）</td>
        </tr>
        <tr>
            <td>5</td>
            <td>根据Jsp-charset=GB2312把Unicode转化为字节流</td>
            <td>D6 D0 CE C4</td>
        </tr>
        <tr>
            <td>6</td>
            <td>把字节流输出到IE中，并设置IE的编码为GB2312（作者按：这个信息隐藏在HTTP头中）</td>
            <td>D6 D0 CE C4</td>
        </tr>
        <tr>
            <td>7</td>
            <td>IE用&#8220;简体中文&#8221;查看结果</td>
            <td>&#8220;中文&#8221;（正确显示）</td>
        </tr>
    </tbody>
</table>
<br />
如果指定了＜Jsp-charset＞为ISO8859-1，转化过程如下表。<br />
<br />
表5　Jsp-charset = ISO8859-1时的变化过程<br />
<br />
<table align="center" border="1" cellpadding="0" cellspacing="0" width="90%">
    <tbody>
        <tr>
            <td width="7%">序号</td>
            <td width="66%">步骤说明</td>
            <td width="27%">结果</td>
        </tr>
        <tr>
            <td>1</td>
            <td>编写JSP源文件，且存为GB2312格式</td>
            <td>D6 D0 CE C4<br />
            （D6D0=中 CEC4=文）</td>
        </tr>
        <tr>
            <td>2</td>
            <td>jspc把JSP源文件转化为临时JAVA文件，并把字符串按照ISO8859-1映射到Unicode，并用UTF格式写入JAVA文件中</td>
            <td>C3 96 C3 90 C3 8E C3 84</td>
        </tr>
        <tr>
            <td>3</td>
            <td>把临时JAVA文件编译成CLASS文件</td>
            <td>C3 96 C3 90 C3 8E C3 84</td>
        </tr>
        <tr>
            <td>4</td>
            <td>运行时，先从CLASS文件中用readUTF读出字符串，在内存中的是Unicode编码</td>
            <td>00 D6 00 D0 00 CE 00 C4<br />
            （啥都不是！！！）</td>
        </tr>
        <tr>
            <td>5</td>
            <td>根据Jsp-charset=ISO8859-1把Unicode转化为字节流</td>
            <td>D6 D0 CE C4</td>
        </tr>
        <tr>
            <td>6</td>
            <td>把字节流输出到IE中，并设置IE的编码为ISO8859-1（作者按：这个信息隐藏在HTTP头中）</td>
            <td>D6 D0 CE C4</td>
        </tr>
        <tr>
            <td>7</td>
            <td>IE用&#8220;西欧字符&#8221;查看结果</td>
            <td>乱码，其实是四个ASCII字符，但由于大于128，所以显示出来的怪模怪样</td>
        </tr>
        <tr>
            <td>8</td>
            <td>改变IE的页面编码为&#8220;简体中文&#8221;</td>
            <td>&#8220;中文&#8221;（正确显示）</td>
        </tr>
    </tbody>
</table>
<br />
奇怪了！为什么把＜Jsp-charset＞设成GB2312和ISO8859-1是一个样的，都能正确显示？因为表4表5中的第2步和第5步互逆，是相互&#8220;抵消&#8221;的。只不过当指定为ISO8859-1时，要增加第8步操作，殊为不便。<br />
<br />
再看看不指定＜Jsp-charset＞ 时的情况。<br />
<br />
表6　未指定Jsp-charset 时的变化过程<br />
<br />
<table align="center" border="1" cellpadding="0" cellspacing="0" width="90%">
    <tbody>
        <tr>
            <td width="6%">序号</td>
            <td width="70%">步骤说明</td>
            <td width="24%">结果</td>
        </tr>
        <tr>
            <td>1</td>
            <td>编写JSP源文件，且存为GB2312格式</td>
            <td>D6 D0 CE C4<br />
            （D6D0=中 CEC4=文）</td>
        </tr>
        <tr>
            <td>2</td>
            <td>jspc把JSP源文件转化为临时JAVA文件，并把字符串按照ISO8859-1映射到Unicode，并用UTF格式写入JAVA文件中</td>
            <td>C3 96 C3 90 C3 8E C3 84</td>
        </tr>
        <tr>
            <td>3</td>
            <td>把临时JAVA文件编译成CLASS文件</td>
            <td>C3 96 C3 90 C3 8E C3 84</td>
        </tr>
        <tr>
            <td>4</td>
            <td>运行时，先从CLASS文件中用readUTF读出字符串，在内存中的是Unicode编码</td>
            <td>00 D6 00 D0 00 CE 00 C4</td>
        </tr>
        <tr>
            <td>5</td>
            <td>根据Jsp-charset=ISO8859-1把Unicode转化为字节流</td>
            <td>D6 D0 CE C4</td>
        </tr>
        <tr>
            <td>6</td>
            <td>把字节流输出到IE中</td>
            <td>D6 D0 CE C4</td>
        </tr>
        <tr>
            <td>7</td>
            <td>IE用发出请求时的页面的编码查看结果</td>
            <td>视情况而定。如果是简体中文，则能正确显示，否则，需执行表5中的第8步</td>
        </tr>
    </tbody>
</table>
<br />
Servlet：源文件为JAVA文件，格式是GB2312，源文件中含有&#8220;中文&#8221;这两个汉字<br />
<br />
如果＜Compile-charset＞＝GB2312，＜Servlet-charset＞=GB2312<br />
<br />
表7　Compile-charset=Servlet-charset=GB2312 时的变化过程<br />
<br />
<table align="center" border="1" cellpadding="0" cellspacing="0" width="90%">
    <tbody>
        <tr>
            <td>序号</td>
            <td>步骤说明</td>
            <td>结果</td>
        </tr>
        <tr>
            <td>1</td>
            <td>编写Servlet源文件，且存为GB2312格式</td>
            <td>D6 D0 CE C4<br />
            （D6D0=中 CEC4=文）</td>
        </tr>
        <tr>
            <td>2</td>
            <td>用javac &#8211;encoding GB2312把JAVA源文件编译成CLASS文件</td>
            <td>E4 B8 AD E6 96 87　（UTF）</td>
        </tr>
        <tr>
            <td>3</td>
            <td>运行时，先从CLASS文件中用readUTF读出字符串，在内存中的是Unicode编码</td>
            <td>4E 2D 65 87 (Unicode)</td>
        </tr>
        <tr>
            <td>4</td>
            <td>根据Servlet-charset=GB2312把Unicode转化为字节流</td>
            <td>D6 D0 CE C4 (GB2312)</td>
        </tr>
        <tr>
            <td>5</td>
            <td>把字节流输出到IE中并设置IE的编码属性为Servlet-charset=GB2312</td>
            <td>D6 D0 CE C4 (GB2312)</td>
        </tr>
        <tr>
            <td>6</td>
            <td>IE用&#8220;简体中文&#8221;查看结果</td>
            <td>&#8220;中文&#8221;（正确显示）</td>
        </tr>
    </tbody>
</table>
<br />
如果＜Compile-charset＞＝ISO8859-1，＜Servlet-charset＞=ISO8859-1<br />
<br />
表8　Compile-charset=Servlet-charset=ISO8859-1时的变化过程<br />
<br />
<table align="center" border="1" cellspacing="0" width="90%">
    <tbody>
        <tr>
            <td>序号</td>
            <td>步骤说明</td>
            <td>结果</td>
        </tr>
        <tr>
            <td>1</td>
            <td>编写Servlet源文件，且存为GB2312格式</td>
            <td>D6 D0 CE C4<br />
            （D6D0=中 CEC4=文）</td>
        </tr>
        <tr>
            <td>2</td>
            <td>用javac &#8211;encoding ISO8859-1把JAVA源文件编译成CLASS文件</td>
            <td>C3 96 C3 90 C3 8E C3 84　（UTF）</td>
        </tr>
        <tr>
            <td>3</td>
            <td>运行时，先从CLASS文件中用readUTF读出字符串，在内存中的是Unicode编码</td>
            <td>00 D6 00 D0 00 CE 00 C4</td>
        </tr>
        <tr>
            <td>4</td>
            <td>根据Servlet-charset=ISO8859-1把Unicode转化为字节流</td>
            <td>D6 D0 CE C4</td>
        </tr>
        <tr>
            <td>5</td>
            <td>把字节流输出到IE中并设置IE的编码属性为Servlet-charset=ISO8859-1</td>
            <td>D6 D0 CE C4 (GB2312)</td>
        </tr>
        <tr>
            <td>6</td>
            <td>IE用&#8220;西欧字符&#8221;查看结果</td>
            <td>乱码（原因同表5）</td>
        </tr>
        <tr>
            <td>7</td>
            <td>改变IE的页面编码为&#8220;简体中文&#8221;</td>
            <td>&#8220;中文&#8221;（正确显示）</td>
        </tr>
    </tbody>
</table>
<br />
如果不指定Compile-charset或Servlet-charset，其默认值均为ISO8859-1。<br />
<br />
当Compile-charset=Servlet-charset时，第2步和第4步能互逆，&#8220;抵消&#8221;，显示结果均能正确。读者可试着写一下Compile-charset＜＞Servlet-charset时的情况，肯定是不正确的。<br />
<br />
当输出对象是数据库时<br />
<br />
输出到数据库时，原理与输出到浏览器也是一样的。本节只是Servlet为例，JSP的情况请读者自行推导。<br />
<br />
假设有一个Servlet，它能接收来自客户端（IE，简体中文）的汉字字符串，然后把它写入到内码为ISO8859-1的数据库中，然后再从数据库中取出这个字符串，显示到客户端。<br />
<br />
表9　输出对象是数据库时的变化过程（1）<br />
<br />
<table align="center" border="1" cellpadding="0" cellspacing="0" width="90%">
    <tbody>
        <tr>
            <td width="6%">序号</td>
            <td width="62%">步骤说明</td>
            <td width="25%">结果</td>
            <td width="7%">域</td>
        </tr>
        <tr>
            <td>1</td>
            <td>在IE中输入&#8220;中文&#8221;</td>
            <td>D6 D0 CE C4</td>
            <td rowspan="2">IE</td>
        </tr>
        <tr>
            <td>2</td>
            <td>IE把字符串转变成UTF，并送入传输流中</td>
            <td>E4 B8 AD E6 96 87</td>
        </tr>
        <tr>
            <td>3</td>
            <td>Servlet接收到输入流，用readUTF读取</td>
            <td>4E 2D 65 87(unicode)</td>
            <td rowspan="4">Servlet</td>
        </tr>
        <tr>
            <td>4</td>
            <td>编程者在Servlet中必须把字符串根据GB2312还原为字节流</td>
            <td>D6 D0 CE C4</td>
        </tr>
        <tr>
            <td>5</td>
            <td>编程者根据数据库内码ISO8859-1生成新的字符串</td>
            <td>00 D6 00 D0 00 CE 00 C4</td>
        </tr>
        <tr>
            <td>6</td>
            <td>把新生成的字符串提交给JDBC</td>
            <td>00 D6 00 D0 00 CE 00 C4</td>
        </tr>
        <tr>
            <td>7</td>
            <td>JDBC检测到数据库内码为ISO8859-1</td>
            <td>00 D6 00 D0 00 CE 00 C4</td>
            <td rowspan="4">JDBC</td>
        </tr>
        <tr>
            <td>8</td>
            <td>JDBC把接收到的字符串按照ISO8859-1生成字节流</td>
            <td>D6 D0 CE C4</td>
        </tr>
        <tr>
            <td>9</td>
            <td>JDBC把字节流写入数据库中</td>
            <td>D6 D0 CE C4</td>
        </tr>
        <tr>
            <td>10</td>
            <td>完成数据存储工作</td>
            <td>D6 D0 CE C4 数据库</td>
        </tr>
        <tr>
            <td colspan="4">
            <div align="center">以下是从数据库中取出数的过程</div>
            </td>
        </tr>
        <tr>
            <td>11</td>
            <td>JDBC从数据库中取出字节流</td>
            <td>D6 D0 CE C4</td>
            <td>JDBC</td>
        </tr>
        <tr>
            <td>12</td>
            <td>JDBC按照数据库的字符集ISO8859-1生成字符串，并提交给Servlet</td>
            <td>00 D6 00 D0 00 CE 00 C4 (Unicode)</td>
            <td>&nbsp;</td>
        </tr>
        <tr>
            <td>13</td>
            <td>Servlet获得字符串</td>
            <td>00 D6 00 D0 00 CE 00 C4 (Unicode)</td>
            <td>Servlet</td>
        </tr>
        <tr>
            <td>14</td>
            <td>编程者必须根据数据库的内码ISO8859-1还原成原始字节流</td>
            <td>D6 D0 CE C4</td>
            <td>&nbsp;</td>
        </tr>
        <tr>
            <td>15</td>
            <td>编程者必须根据客户端字符集GB2312生成新的字符串</td>
            <td>4E 2D 65 87<br />
            （Unicode）</td>
            <td>&nbsp;</td>
        </tr>
        <tr>
            <td colspan="4">
            <div align="center">Servlet准备把字符串输出到客户端</div>
            </td>
        </tr>
        <tr>
            <td>16</td>
            <td>Servlet根据＜Servlet-charset＞生成字节流</td>
            <td>D6D0 CE C4</td>
            <td rowspan="2">Servlet</td>
        </tr>
        <tr>
            <td>17</td>
            <td>Servlet把字节流输出到IE中，如果已指定＜Servlet-charset＞，还会设置IE的编码为＜Servlet-charset＞</td>
            <td>D6 D0 CE C4</td>
        </tr>
        <tr>
            <td>18</td>
            <td>IE根据指定的编码或默认编码查看结果</td>
            <td>&#8220;中文&#8221;（正确显示）</td>
            <td>IE</td>
        </tr>
    </tbody>
</table>
<br />
解释一下，表中第4第5步和第15第16步是用红色标记的，表示要由编码
者来作转换。第4、5两步其实就是一句话：&#8220;new String(source.getBytes("GB2312"),
"ISO8859-1")&#8221;。第15、16两步也是一句话：&#8220;new String(source.getBytes("ISO8859-1"),
"GB2312")&#8221;。亲爱的读者，你在这样编写代码时是否意识到了其中的每一个细节呢？<br />
<br />
至于客户端内码和数据库内码为其它值时的流程，和输出对象是系统控制台时的流程，请读者自己想吧。明白了上述流程的原理，相信你可以轻松地写出来。<br />
<br />
行文至此，已可告一段落了。终点又回到了起点，对于编程者而言，几乎是什么影响都没有。<br />
<br />
因为我们早就被告之要这么做了。<br />
<br />
以下给出一个结论，作为结尾。<br />
<br />
1、
在Jsp文件中，要指定contentType，其中，charset的值要与客户端浏览器所用的字符集一样；对于其中的字符串常量，不需做任何内码转
换；对于字符串变量，要求能根据ContentType中指定的字符集还原成客户端能识别的字节流，简单地说，就是&#8220;字符串变量是基于＜Jsp-
charset＞字符集的&#8221;；<br />
<br />
2、
在Servlet中，必须用HttpServletResponse.setContentType()设置charset，且设置成与客户端内码一致；
对于其中的字符串常量，需要在Javac编译时指定encoding，这个encoding必须与编写源文件的平台的字符集一样，一般说来都是
GB2312或GBK；对于字符串变量，与JSP一样，必须&#8220;是基于＜Servlet-charset＞字符集的&#8221;。</span></p>
<img src ="http://www.blogjava.net/sodar-fish/aggbug/175934.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sodar-fish/" target="_blank">backup2007</a> 2008-01-17 14:34 <a href="http://www.blogjava.net/sodar-fish/articles/175934.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编码问题2转</title><link>http://www.blogjava.net/sodar-fish/articles/175931.html</link><dc:creator>backup2007</dc:creator><author>backup2007</author><pubDate>Thu, 17 Jan 2008 06:30:00 GMT</pubDate><guid>http://www.blogjava.net/sodar-fish/articles/175931.html</guid><wfw:comment>http://www.blogjava.net/sodar-fish/comments/175931.html</wfw:comment><comments>http://www.blogjava.net/sodar-fish/articles/175931.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sodar-fish/comments/commentRss/175931.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sodar-fish/services/trackbacks/175931.html</trackback:ping><description><![CDATA[<div style="text-indent: 21pt;">Jsp页面使用URL编码传递中文参数的情况下，在参数的解析过程中会出现乱码。由于
java在设计的时候考虑到了国际化的问题，在java源程序编译成字节码的时候默认使用的是UTF-8编码。而在web运用上，由于不同的浏览器向服务
器发送的信息采用的编码方式不同，在由像tomcat之类的服务器解码的时候会由于编码方式的不同而产生乱码，这是一个会困扰jsp初学者很久的问题。以
前在使用struts的时候不需要处理这些问题，前些天在做一个简单的jsp页面的时候碰到这个问题。经过半天的摸索，基本解决了该问题。</div>
<div style="text-indent: 21pt;">例子中a.jsp页面通过URL编码的方式传递中文参数，在b.jsp中对该参数进行解析。</div>
<div style="text-indent: 21pt;">a.jsp源代码</div>
<div style="text-indent: 21pt;">&lt;%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %&gt;</div>
<div style="text-indent: 21pt;">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;</div>
<div style="text-indent: 21pt;">&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;</div>
<div style="text-indent: 21pt;">&lt;head&gt;</div>
<div style="text-indent: 21pt;">&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312" /&gt;</div>
<div style="text-indent: 21pt;">&lt;title&gt;无标题文档&lt;/title&gt;</div>
<div style="text-indent: 21pt;">&lt;/head&gt;</div>
<div style="text-indent: 21pt;">&nbsp;</div>
<div style="text-indent: 21pt;">&lt;body&gt;</div>
<div style="text-indent: 21pt;">&lt;%&nbsp;</div>
<div style="text-indent: 21pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String&nbsp;str_test&nbsp;=&nbsp;"华工";</div>
<div style="text-indent: 21pt;">%&gt;</div>
<div style="text-indent: 21pt;">&lt;form&nbsp;method=post&nbsp;action="b.jsp?test=&lt;%=java.net.URLEncoder.encode(str_test) %&gt;"&gt;&nbsp;</div>
<div style="text-indent: 21pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input&nbsp;type="submit"&nbsp;value="Submit"&nbsp;name="提交"&gt;&nbsp;&nbsp; </div>
<div style="text-indent: 21pt;">&nbsp;&lt;/form&gt;</div>
<div style="text-indent: 21pt;">&nbsp;</div>
<div style="text-indent: 21pt;">&lt;/body&gt;</div>
<div style="text-indent: 21pt;">&lt;/html&gt;</div>
<div style="text-indent: 21pt;">&nbsp;</div>
<div style="text-indent: 21pt;">b.jsp源代码</div>
<div style="text-indent: 21pt;">&lt;%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %&gt;</div>
<div style="text-indent: 21pt;">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;</div>
<div style="text-indent: 21pt;">&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;</div>
<div style="text-indent: 21pt;">&lt;head&gt;</div>
<div style="text-indent: 21pt;">&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312" /&gt;</div>
<div style="text-indent: 21pt;">&lt;title&gt;无标题文档&lt;/title&gt;</div>
<div style="text-indent: 21pt;">&lt;/head&gt;</div>
<div style="text-indent: 21pt;">&nbsp;</div>
<div style="text-indent: 21pt;">&lt;body&gt;</div>
<div style="text-indent: 21pt;">&nbsp;</div>
<div style="text-indent: 21pt;">&lt;% </div>
<div style="text-indent: 21pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String&nbsp;str = new String(request.getParameter("test").getBytes("ISO8859_1"));</div>
<div style="text-indent: 21pt;">%&gt;&nbsp;</div>
<div style="text-indent: 21pt;">&nbsp;&lt;BR&gt;</div>
<div style="text-indent: 21pt;">&nbsp;&lt;%=str %&gt; </div>
<div style="text-indent: 21pt;">&lt;/body&gt;</div>
<div style="text-indent: 21pt;">&lt;/html&gt;</div>
<div style="text-indent: 21pt;">说明：在使用了java.net.URLEncoder.encode 编码后，页面获取参数request.getParameter后需要使用ISO8859_1编码转换。此外，在jsp的字符集声明中把charset=UTF-8也没有问题</div>
<img src ="http://www.blogjava.net/sodar-fish/aggbug/175931.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sodar-fish/" target="_blank">backup2007</a> 2008-01-17 14:30 <a href="http://www.blogjava.net/sodar-fish/articles/175931.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编码问题1 转</title><link>http://www.blogjava.net/sodar-fish/articles/175929.html</link><dc:creator>backup2007</dc:creator><author>backup2007</author><pubDate>Thu, 17 Jan 2008 06:29:00 GMT</pubDate><guid>http://www.blogjava.net/sodar-fish/articles/175929.html</guid><wfw:comment>http://www.blogjava.net/sodar-fish/comments/175929.html</wfw:comment><comments>http://www.blogjava.net/sodar-fish/articles/175929.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sodar-fish/comments/commentRss/175929.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sodar-fish/services/trackbacks/175929.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: HTML：&nbsp;&nbsp;&nbsp; &#8230;&#8230;&nbsp;&nbsp;&nbsp; //实际上这里的charset=utf-8 也是可以的，因为在中文平台下&nbsp;&nbsp;&nbsp; //用了GB2312&nbsp;&nbsp;&nbsp; JS：&nbsp;&nbsp;&nbsp; 我用了两个方法提交：GET 和 POST。...&nbsp;&nbsp;<a href='http://www.blogjava.net/sodar-fish/articles/175929.html'>阅读全文</a><img src ="http://www.blogjava.net/sodar-fish/aggbug/175929.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sodar-fish/" target="_blank">backup2007</a> 2008-01-17 14:29 <a href="http://www.blogjava.net/sodar-fish/articles/175929.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>vim 常用命令  转</title><link>http://www.blogjava.net/sodar-fish/articles/170133.html</link><dc:creator>backup2007</dc:creator><author>backup2007</author><pubDate>Mon, 24 Dec 2007 10:33:00 GMT</pubDate><guid>http://www.blogjava.net/sodar-fish/articles/170133.html</guid><wfw:comment>http://www.blogjava.net/sodar-fish/comments/170133.html</wfw:comment><comments>http://www.blogjava.net/sodar-fish/articles/170133.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sodar-fish/comments/commentRss/170133.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sodar-fish/services/trackbacks/170133.html</trackback:ping><description><![CDATA[1、vim颜色太暗，默认的尤其是注释颜色太暗，根本看不清，可通过下述方式设置<br />
:colorscheme evening<br />
<br />
2、vim以16进制方式编辑文件：<br />
:%!xxd<br />
<br />
3、用vim格式化代码<br />
从别的编辑器里粘贴到vim里的代码经常由于不正常的缩进变得格式混乱，有如下两种方式：<br />
格式化全文： gg=G<br />
自动缩进当前行： ==<br />
<br />
4、vim退出后在
<table cellpadding="0" cellspacing="0" height="100%" width="100%">
    <tbody>
        <tr>
            <td id="bxMailText" style="color: black; line-height: 25px; padding-top: 16px;" background="http://blogteam.bokee.com/pub/neweditor/editor/images/paper/line/gray.gif" valign="top"><nobr><strong onclick='javascript:window.open("http://www.google.com/aclk?sa=l&ai=B5-WqloFvR8yLIpPG7APM49nCA_C42AiMgqW1AZjQ99AD0LsbEAMYAyCvmqoJKAc4AVD39KKy_P____8BYJ2Z2oHIBaABiMyW_QOqAQoxMDAwMDE2MDAyyAEBqQIdjRx1oDOBPtkDm3hUvJ2kELk&num=3&q=http://www.socket.net.cn&sig=AGiWqtyIug5A7H8PZE_oLycCOieT7bvPpQ");GgKwClickStat("屏幕","www.socket.net.cn","afs","1000016002");' onmouseout='isShowGg = false;InTextAds_GgLayer="_u5C4F_u5E55"' onmouseover='isShowAds = false;isShowAds2 = false;isShowGg = true;InTextAds_GgLayer="_u5C4F_u5E55";KeyGate_ads.ShowGgAds(this,"_u5C4F_u5E55",event)' style="border: 0px none ; margin: 0px; padding: 0px; color: #0000ff; font-weight: normal; text-decoration: underline;">屏幕</strong></nobr>上保留被编辑文件的内容：<br />
            :set t_ti= t_te=<br />
            <br />
            5、多文件编辑<br />
            打开多个文件：vim a.c b.c b.c<br />
            切换到下一文件：n<br />
            切换到另一文件：e &lt;文件名如b.c&gt;<br />
            返回上一文件：　e#<br />
            <br />
            横向分屏：split　（不加参数为分屏当前文件，加文件名为以分屏方式打开另一文件）<br />
            竖向分屏：vsplit，与split不同之处在于竖向分屏<br />
            分屏后切换：ctrl+两次按w<br />
            <br />
            6、删除内容到缓冲区<br />
            x为删除光标当前字符，而X则删除光标前字符；<br />
            dd为删除当前行；<br />
            nx，nX，ndd则表明删除的数目；<br />
            <br />
            7、拷贝内容到缓冲区<br />
            yy，为拷贝当前行到缓冲区；<br />
            yw，为拷贝单个词到缓冲区；<br />
            nyy，nyw则表明拷贝的数目；<br />
            <br />
            8、<nobr><strong onclick='javascript:window.open("http://www.google.com/aclk?sa=L&ai=B4iaMloFvR8yLIpPG7APM49nCA96NkyWSxNLsB-nJ7nyQvwUQBxgHIK-aqgkoBzgBUPGSp5f______wFgnZnagcgFqgEKMTAwMDAxNjAwMsgBAakCgsBygq47gj7IApK0tQHZA5t4VLydpBC5&num=7&q=http://www.osrh180.cn&sig=AGiWqtyt3OUk7CM4cBWJOixI9X8r4Dr0gQ");GgKwClickStat("移动","www.osrh180.cn","afs","1000016002");' onmouseout='isShowGg = false;InTextAds_GgLayer="_u79FB_u52A8"' onmouseover='isShowAds = false;isShowAds2 = false;isShowGg = true;InTextAds_GgLayer="_u79FB_u52A8";KeyGate_ads.ShowGgAds(this,"_u79FB_u52A8",event)' style="border: 0px none ; margin: 0px; padding: 0px; color: #0000ff; font-weight: normal; text-decoration: underline;">移动</strong></nobr>到某一行：<br />
            : n，n为行号<br />
            或<br />
            nG，n为行号<br />
            <br />
            9、visual编辑<br />
            三种进入方式：<br />
            v ---- 以字符为单位进行选择<br />
            V ---- 以行为单位进行选择<br />
            ctrl+v ---- 以列块方式进行选择<br />
            ctrl+c ---- 退出visual编辑方式<br />
            <br />
            进入后对选择进行的操作有：<br />
            d --- 删除<br />
            y --- 复制<br />
            &gt; --- 右移4格<br />
            &lt; --- 左移4格<br />
            ~ --- 大小写切换<br />
            U --- 变成大写<br />
            u --- 变成小写</td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/sodar-fish/aggbug/170133.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sodar-fish/" target="_blank">backup2007</a> 2007-12-24 18:33 <a href="http://www.blogjava.net/sodar-fish/articles/170133.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>quote :  installnation of  eclipse for java</title><link>http://www.blogjava.net/sodar-fish/articles/170109.html</link><dc:creator>backup2007</dc:creator><author>backup2007</author><pubDate>Mon, 24 Dec 2007 09:21:00 GMT</pubDate><guid>http://www.blogjava.net/sodar-fish/articles/170109.html</guid><wfw:comment>http://www.blogjava.net/sodar-fish/comments/170109.html</wfw:comment><comments>http://www.blogjava.net/sodar-fish/articles/170109.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sodar-fish/comments/commentRss/170109.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sodar-fish/services/trackbacks/170109.html</trackback:ping><description><![CDATA[<div>
<p>1. 下载文件<br />
JDK&nbsp;&nbsp;&nbsp; jdk-1_5_0_06-linux-i586-rpm.bin&nbsp;&nbsp;<a href="http://java.sun.com/">http://java.sun.com</a><br />
eclipse&nbsp;&nbsp;&nbsp; eclipse-SDK-3.1.2-linux-gtk.tar.gz&nbsp;&nbsp;<a href="http://www.eclipse.org/">http://www.eclipse.org</a><br />
CDT&nbsp;&nbsp;&nbsp; org.eclipse.cdt-3.0.2-linux.x86.tar.gz&nbsp;&nbsp;<a href="http://www.eclipse.org/cdt">http://www.eclipse.org/cdt</a></p>
<p>2. 安装JDK</p>
<p>chmod +x jdk-1_5_0_06-linux-i586-rpm.bin<br />
./jdk-1_5_0_06-linux-i586-rpm.bin</p>
<p>设置环境变量，编辑/etc/profile，在下面加入</p>
<p>export JAVA_HOME=/usr/java/jdk1.5.0_06<br />
export PATH=$JAVA_HOME/bin:$PATH<br />
CLASSPATH=.:/usr/java/jdk1.5.0_06/lib/tools.jar:$CLASSPATH<br />
export CLASSPATH</p>
<p>3. 安装eclipse</p>
<p>tar -zxvf eclipse-SDK-3.1.2-linux-gtk.tar.gz</p>
<p>再移动到想要的目录中，这里为/opt<br />
编写一个执行脚本，内容如下：</p>
<p>#eclipse<br />
#<br />
export JAVA_HOME=/usr/java/jdk1.5.0_06<br />
export CLASSPATH=/usr/java/jdk1.5.0_06/lib<br />
/opt/eclipse/eclipse -vm /usr/java/jdk1.5.0_06/bin/java -data ~/workspace &amp;</p>
<p>cp eclipse.sh /usr/local/bin<br />
chmod 755 /usr/local/bin/eclipse.sh</p>
<p>将eclipse.sh
添加到桌面。桌面上按下鼠标右键，在弹出菜单中选择&#8220;创建启动器&#8221;，在&#8220;名称&#8221;中输入Eclipse、&#8220;命令&#8221;中填
/usr/local/bin/eclipse.sh，按&#8220;确定&#8221;，桌面上就有eclipse的快捷方式了，以后可以直接双击这个图标启动
Eclipse。 </p>
<p>4. 安装CDT</p>
<p>tar -zxvf org.eclipse.cdt-3.0.2-linux.x86.tar.gz</p>
<p>将相映目录中的文件cp到eclipse目录中</p>
<br />
<p><br />
</p>
<br />
<p><br />
</p>
<p>---------------------</p>
<p style="margin: 0cm 0cm 0pt; text-indent: 18pt; text-align: left;" align="left"><span style="font-size: 9pt;"><font size="3">先要在linux下安装好jre，我的jre的安装目录是/usr/java/jre1.5</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 18pt; text-align: left;" align="left"><font size="3"><span style="font-size: 9pt;">把下载的文件解压即可：</span></font></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 18pt; text-align: left;" align="left"><font size="3"><span style="font-size: 9pt;">#tar -zxvf eclipse-SDK-3.2-linux-gtk.tar.gz</span><span style="font-size: 9pt;">（可以加上绝对路径）</span></font></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 18pt; text-align: left;" align="left"><font size="3"><span style="font-size: 9pt;">3 </span><span style="font-size: 9pt;">为让每个用户都可以执行</span><span style="font-size: 9pt;">Eclipse</span><span style="font-size: 9pt;">，编写</span><span style="font-size: 9pt;">Eclipse.sh</span><span style="font-size: 9pt;">脚本：</span></font></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 20pt; text-align: left;" align="left"><span style="font-size: 10pt;"><font size="3">#!/bin/bash</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 20pt; text-align: left;" align="left"><span style="font-size: 10pt;"><font size="3">#</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 20pt; text-align: left;" align="left"><span style="font-size: 10pt;"><font size="3">#exe eclipse3.2</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 20pt; text-align: left;" align="left"><span style="font-size: 10pt;"><font size="3">#</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 20pt; text-align: left;" align="left"><font size="3"><span style="font-size: 10pt;">/usr/eclipse/eclipse -vm /usr/java/jre1.5/bin/java -data ~/workspace &amp;</span></font></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 18pt; text-align: left;" align="left"><font size="3"><span style="font-size: 9pt;"># -vm </span><span style="font-size: 9pt;">参数用以指定使用哪一个</span><span style="font-size: 9pt;"> jvm </span><span style="font-size: 9pt;">来执行</span><span style="font-size: 9pt;">Eclipse</span><span style="font-size: 9pt;">，</span></font></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 18pt; text-align: left;" align="left"><font size="3"><span style="font-size: 9pt;"># -date</span><span style="font-size: 9pt;">参数用以指定</span><span style="font-size: 9pt;">Eclipse</span><span style="font-size: 9pt;">的数据目录。在此指定其存在用户根目录</span><span style="font-size: 9pt;">(~)</span><span style="font-size: 9pt;">下的</span><span style="font-size: 9pt;">workspace</span><span style="font-size: 9pt;">目录中</span></font></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 18pt; text-align: left;" align="left"><font size="3"><span style="font-size: 9pt;">将</span><span style="font-size: 9pt;">eclipse.sh </span><span style="font-size: 9pt;">复制到</span><span style="font-size: 9pt;">/usr/local/bin</span><span style="font-size: 9pt;">中，并为它加上权限</span><span style="font-size: 9pt;">755</span><span style="font-size: 9pt;">；现在执行</span><span style="font-size: 9pt;"> eclipse.sh </span><span style="font-size: 9pt;">即可启动</span><span style="font-size: 9pt;"> Eclipse</span><span style="font-size: 9pt;">。</span></font></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 18pt; text-align: left;" align="left"><font size="3"><span style="font-size: 9pt;">4</span><span style="font-size: 9pt;">桌面上建立快捷方式：</span></font></p>
<font size="3"><span style="font-size: 9pt;">在桌面上按下鼠标右键，在弹出菜单中选择&#8220;新增启动&#8221;，之后分別在&#8220;名称&#8221;中输入</span><span style="font-size: 9pt;">Eclipse3.2</span><span style="font-size: 9pt;">，&#8220;命令&#8221;中填</span><span style="font-size: 9pt;"> /usr/local/bin/eclipse.sh</span><span style="font-size: 9pt;">，然后再为它随便找个喜欢的图标（我用的是</span><span style="font-size: 9pt;">/opt/eclipse/icon.xpm</span><span style="font-size: 9pt;">）</span><span style="font-size: 9pt;">;</span><span style="font-size: 9pt;">再后按</span><span style="font-size: 9pt;">&#8220;确定&#8221;，桌面上就有</span><span style="font-size: 9pt;">eclipse</span><span style="font-size: 9pt;">的快捷方式了，以后可以直接双击这个图标启动</span><span style="font-size: 9pt;">Eclipse</span><span style="font-size: 9pt;">。</span></font>
</div>
<br />
<img src ="http://www.blogjava.net/sodar-fish/aggbug/170109.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sodar-fish/" target="_blank">backup2007</a> 2007-12-24 17:21 <a href="http://www.blogjava.net/sodar-fish/articles/170109.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转 eclipse3.3 + minGW for c/c++ development</title><link>http://www.blogjava.net/sodar-fish/articles/170001.html</link><dc:creator>backup2007</dc:creator><author>backup2007</author><pubDate>Mon, 24 Dec 2007 03:51:00 GMT</pubDate><guid>http://www.blogjava.net/sodar-fish/articles/170001.html</guid><wfw:comment>http://www.blogjava.net/sodar-fish/comments/170001.html</wfw:comment><comments>http://www.blogjava.net/sodar-fish/articles/170001.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sodar-fish/comments/commentRss/170001.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sodar-fish/services/trackbacks/170001.html</trackback:ping><description><![CDATA[本设置的主要目的是在最新版的eclipse3.3(Europa)上开发标准C/C++程序，而不去使用VC++。 <br />
<br />
因为CDT只提供了开发C/C++项目的IDE，所以我们需要安装MinGW（即 Minimalist GNU For Windows。它是一些头文件和端口库的集合，该集合允许人们在没有第三方动态链接库的情况下使用 GCC（GNU Compiler C）产生 Windows32 程序。）和MSYS（Minimal GNU（POSIX）system on Windows，是一个小型的GNU环境，包括基本的bash，make等等。是Windows下最优秀的GNU环境。）： <br />
下载Automated MinGW Installer:MinGW-5.1.3.exe（注意这只是个在线安装程序），执行MinGW-5.1.3.exe； <br />
在choose package向导页，选择Current项； <br />
在choose components向导页，选中MinGW base tools和g++ compiler项； <br />
在choose install location向导页，设置安装目录，为说明方便，这里假设路径为d:\MinGW； <br />
等待MinGW在线安装完成。 <br />
接下来，在下载MinGW的同一页面，我们下载MSYS (Minimal System):Current Release: msys-1.0.10，执行MSYS-1.0.10.exe； <br />
在安装MSYS过程中，假定我们安装路径为D:\msys; <br />
在安装MSYS过程中，会出现控制台界面（类DOS窗口）的三个询问，分别键入y、y、D:/MinGW（MinGW安装路径）即可。 <br />
安装好MinGW和MYYS后，需要配置一下系统的环境变量，右键点击&#8220;我的电脑&#8221;-&gt;属性-&gt;高级-&gt;环境变量，在系统变量中进行如下操作： <br />
编辑PATH变量，在开头处加入D:\MinGW\bin;D:\msys\1.0\bin; <br />
添加LIBRARY_PATH变量，值为D:\MinGW\lib <br />
添加C_INCLUDE_PATH变量，值为D:\MinGW\include <br />
添加CPLUS_INCLUDE_PATH变量，值为D:\MinGW\include\c++\3.4.2;D:\MinGW\include\c++\3.4.2\mingw32;D:\MinGW\include\c++\3.4.2\backward;D:\MinGW\include <br />
打开系统开始菜单-&gt;附件-&gt;命令提示符，在里面输入make &#8211;version或gcc &#8211;version并回车，如果出现版本信息，则配置成功。 <br />
如果你的系统上没有安装jre，去下载最新版的jre5.0，并进行安装。 <br />
接下来这步，我们先进入到<a href="http://www.eclipse.org/downloads/" target="_blank">http://www.eclipse.org/downloads/</a>页面，最好直接下载Eclipse IDE for C/C++ Developers - Windows (62 MB) 这个版本，基本上下载完后就可以正常使用。<br />
<br />
如果你已经有了eclipse3.3但需要单独安装CDT4的话，请参见这里CDT Europa Releases Update Site，里面说的很清楚，可以在eclipse的help-&gt;Software Updates -&gt; Find and Install -&gt; Search for new Features to Install中，加入一个site <a href="http://download.eclipse.org/tools/cdt/releases/europa" target="_blank">http://download.eclipse.org/tools/cdt/releases/europa</a>升级即可。<br />
<br />
值得注意的是，不要直接下载cdt-master-4.0.0.zip，并且解压缩后覆盖到eclipse目录下！，否则虽然可以调出CDT界面，但编译和执行会有问题。 <br />
<br />
最后，我们启动eclipse并进行一个测试，创建一个C++ Project，选择Executable-&gt;Hello World C++ Project，toolchain选择MinGW GCC。创建后build它即可。 
<img src ="http://www.blogjava.net/sodar-fish/aggbug/170001.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sodar-fish/" target="_blank">backup2007</a> 2007-12-24 11:51 <a href="http://www.blogjava.net/sodar-fish/articles/170001.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>bootSect.S 文件中的include小问题</title><link>http://www.blogjava.net/sodar-fish/articles/167573.html</link><dc:creator>backup2007</dc:creator><author>backup2007</author><pubDate>Thu, 13 Dec 2007 10:23:00 GMT</pubDate><guid>http://www.blogjava.net/sodar-fish/articles/167573.html</guid><wfw:comment>http://www.blogjava.net/sodar-fish/comments/167573.html</wfw:comment><comments>http://www.blogjava.net/sodar-fish/articles/167573.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sodar-fish/comments/commentRss/167573.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sodar-fish/services/trackbacks/167573.html</trackback:ping><description><![CDATA[<p>在 Linux 启动过程中，最开始加载的程序就是 bootSect.S 文件.</p>
<p>其中第一行是一个include 语句：#include &lt;asm/boot.h&gt;<br />
而当我去查看boot.h的时候，发现它的真正位置在&nbsp;"include/asm-i386/boot.h" 而不是 "include/&nbsp;asm/boot.h"</p>
<p>这让我很不解,查网上资料也没有解答, 打开makefile文件,仔细看了一下,终于找到原因:</p>
<p>在makefile 中有这么一段:</p>
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">symlinks:<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;rm&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">f&nbsp;include</span><span style="color: #000000">/</span><span style="color: #000000">asm<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;(&nbsp;cd&nbsp;include&nbsp;;&nbsp;ln&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">sf&nbsp;asm</span><span style="color: #000000">-</span><span style="color: #000000">$(ARCH)&nbsp;asm)<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;@if&nbsp;[&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">d&nbsp;include</span><span style="color: #000000">/</span><span style="color: #000000">linux</span><span style="color: #000000">/</span><span style="color: #000000">modules&nbsp;];&nbsp;then&nbsp;<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mkdir&nbsp;include</span><span style="color: #000000">/</span><span style="color: #000000">linux</span><span style="color: #000000">/</span><span style="color: #000000">modules;&nbsp;<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;fi</span></div>
</div>
<p>很明显,首先删除了 asm文件夹,然后 在include 下面做了一个软连接: ln -sf asm-$(ARCH)&nbsp; asm</p>
<p>这里的ARCH明显是系统相关的环境变量了，比如在i386机器上就是代表i386了。这样asm-i386就转成了asm.</p>
<img src ="http://www.blogjava.net/sodar-fish/aggbug/167573.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sodar-fish/" target="_blank">backup2007</a> 2007-12-13 18:23 <a href="http://www.blogjava.net/sodar-fish/articles/167573.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>putty 登陆unix-center ubuntu服务器 输入中文</title><link>http://www.blogjava.net/sodar-fish/articles/167219.html</link><dc:creator>backup2007</dc:creator><author>backup2007</author><pubDate>Wed, 12 Dec 2007 06:10:00 GMT</pubDate><guid>http://www.blogjava.net/sodar-fish/articles/167219.html</guid><wfw:comment>http://www.blogjava.net/sodar-fish/comments/167219.html</wfw:comment><comments>http://www.blogjava.net/sodar-fish/articles/167219.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sodar-fish/comments/commentRss/167219.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sodar-fish/services/trackbacks/167219.html</trackback:ping><description><![CDATA[putty 登陆unix-center ubuntu服务器默认是无法输入中文的，<br />
服务器上的ubuntu默认是GBK字符集，<br />
把putty 的font改成宋体,chinese_GB2312字符集，<br />
transition 里面保留默认Use font encoding 。<br />
重新登陆即可。 <br />
<br />
登陆 solaris 服务器我还没找到输入中文的方法。<br />
<br />
[在~/ 建立.profile 建立环境变量]
<img src ="http://www.blogjava.net/sodar-fish/aggbug/167219.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sodar-fish/" target="_blank">backup2007</a> 2007-12-12 14:10 <a href="http://www.blogjava.net/sodar-fish/articles/167219.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>solaris VIM</title><link>http://www.blogjava.net/sodar-fish/archive/2007/12/12/167136.html</link><dc:creator>backup2007</dc:creator><author>backup2007</author><pubDate>Wed, 12 Dec 2007 01:58:00 GMT</pubDate><guid>http://www.blogjava.net/sodar-fish/archive/2007/12/12/167136.html</guid><wfw:comment>http://www.blogjava.net/sodar-fish/comments/167136.html</wfw:comment><comments>http://www.blogjava.net/sodar-fish/archive/2007/12/12/167136.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sodar-fish/comments/commentRss/167136.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sodar-fish/services/trackbacks/167136.html</trackback:ping><description><![CDATA[<table cellspacing="4" cellpadding="4" width="100%" border="0">
    <tbody>
        <tr>
            <td align="center">出自: http://www.linuxdiyf.com</td>
        </tr>
        <tr>
            <td>
            <table style="table-layout: fixed; word-wrap: break-word" cellspacing="2" cellpadding="2" width="100%" border="0">
                <tbody>
                    <tr>
                        <td class="message" id="zoom">　　我自己的机器是 linux, ssh 远程登录solaris系统, 结果发现不管我使用 xterm 还是 linux console, 在 solaris 上都无法让 vim 在 insert 模式下正确识别方向键.<br />
                        <br />
                        　　在 normal 模式下方向键工作正常, 可一旦进入 insert 模式, 就不行了. 比如按向上方向键, 其结果是插入一个新行, 并输入A, 其实就是把向上键的 escape sequence("ESC O A")当做了三次按键, 而不是把它当做方向键.<br />
                        <br />
                        　　而且无论我把 TERM 设置成 vt100 还是 xterm, 都是一样的结果. <br />
                        <br />
                        　　查找了半天资料, 发现我犯了一个愚蠢而低级的错误. 应该让 vim 运行在 非兼容模式下, 插入模式中才支持方向键!<br />
                        <br />
                        　　在 .vimrc 中加入set nocompatible<br />
                        <br />
                        　　即可.<br />
                        <br />
                        　　实际上登录一个新系统后, 更好的做法是把 vim 自带的一个示例 vimrc 复制到自己的目录中, 做法是在vim中输入<br />
                        <br />
                        　　:!cp -i $VIMRUNTIME/vimrc_example.vim ~/.vimrc</td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/sodar-fish/aggbug/167136.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sodar-fish/" target="_blank">backup2007</a> 2007-12-12 09:58 <a href="http://www.blogjava.net/sodar-fish/archive/2007/12/12/167136.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>