??xml version="1.0" encoding="utf-8" standalone="yes"?>色噜噜亚洲男人的天堂,亚洲熟女综合一区二区三区,亚洲伊人久久大香线蕉结合http://m.tkk7.com/sodar-fish/zh-cnThu, 15 May 2025 02:52:55 GMTThu, 15 May 2025 02:52:55 GMT60我所理解的IE内存泄露http://m.tkk7.com/sodar-fish/archive/2009/02/12/254324.htmlbackup2007backup2007Wed, 11 Feb 2009 20:40:00 GMThttp://m.tkk7.com/sodar-fish/archive/2009/02/12/254324.htmlhttp://m.tkk7.com/sodar-fish/comments/254324.htmlhttp://m.tkk7.com/sodar-fish/archive/2009/02/12/254324.html#Feedback0http://m.tkk7.com/sodar-fish/comments/commentRss/254324.htmlhttp://m.tkk7.com/sodar-fish/services/trackbacks/254324.html阅读全文

backup2007 2009-02-12 04:40 发表评论
]]>
~码问题3?/title><link>http://m.tkk7.com/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://m.tkk7.com/sodar-fish/articles/175934.html</guid><wfw:comment>http://m.tkk7.com/sodar-fish/comments/175934.html</wfw:comment><comments>http://m.tkk7.com/sodar-fish/articles/175934.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/sodar-fish/comments/commentRss/175934.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/sodar-fish/services/trackbacks/175934.html</trackback:ping><description><![CDATA[<p>世界上的各地区都有本地的语言。地区差异直接导致了语言环境的差异。在开发一个国际化E序的过E中Q处理语a问题显得很重要了?/p> <p>  q是一个世界范围内都存在的问题Q所以,Java提供了世界性的解决Ҏ。本文描q的Ҏ是用于处?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>的,但是Q推而广之,对于处理世界上其它国家和地区的语a同样适用?/p> <p>  汉字是双字节的。所谓双字节是指一个双字要占用两个BYTE的位|(?6位)Q分别称为高位和低位。中国规定的汉字~码为GB2312Q这? 强制性的Q目前几乎所有的能处理中文的应用E序都支持GB2312。GB2312包括了一二汉字?区符P高位?xa1?xfeQ低位也是从 0xa1?xfeQ其中,汉字的编码范围ؓ0xb0a1?xf7fe?/p> <p>  另外有一U编码,叫做GBKQ但q是一份规范,不是强制的。GBK提供?0902个汉字,它兼容GB2312Q编码范围ؓ0x8140?xfefe。GBK中的所有字W都可以一一映射到Unicode 2.0?/p> <p>  在不久的来Q中国会颁布另一U标准:GB18030-2000QGBK2KQ。它收录了藏、蒙{少数民族的字型Q从Ҏ上解决了字位不的问 题。注意:它不再是定长的。其二字节部份与GBK兼容Q四字节部分是扩充的字符、字形。它的首字节和第三字节从0x81?xfeQ二字节和第四字节从 0x30?x39?/p> <p>  本文不打介lUnicodeQ有兴趣的可以浏?#8220;http://www.unicode.org/”查看更多的信息。Unicode有一个特 性:它包括了世界上所有的字符字Ş。所以,各个地区的语a都可以徏立与Unicode的映关p,而Java正是利用了这一点以辑ֈ异种语言之间的{换?/p> <p>  在JDK中,与中文相关的~码有:</p> <p>  ? 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相同Q注意:区分大小?/td> </tr> <tr> <td>UTF8</td> <td>与UTF-8相同</td> </tr> <tr> <td>GB18030</td> <td>与cp1392?392相同Q目前支持的JDK很少</td> </tr> </tbody> </table> </p> <p>  在实际编E时Q接触得比较多的是GB2312QGBKQ和ISO8859-1?/p> <p>  Z么会?#8220;?”?/p> <p>  上文说过Q异U语a之间的{换是通过Unicode来完成的。假设有两种不同的语aA和BQ{换的步骤为:先把A转化为UnicodeQ再把Unicode转化为B?/p> <p>  举例说明。有GB2312中有一个汉?#8220;?#8221;Q其~码?#8220;C0EE”Q欲转化为ISO8859-1~码。步骤ؓQ先?#8220;?#8221;字{化ؓ UnicodeQ得?#8220;674E”Q再?#8220;674E”转化为ISO8859-1字符。当Ӟq个映射不会成功Q因为ISO8859-1中根本就没有? “674E”对应的字W?/p> <p>  当映不成功Ӟ问题发生了Q当从某语言向Unicode转化Ӟ如果在某语言中没有该字符Q得到的是Unicode的代?#8220;" uffffd”Q?#8220;"u”表示是Unicode~码Q)。而从Unicode向某语言转化Ӟ如果某语a没有对应的字W,则得到的?#8220;0x3f” Q?#8220;?”Q。这是“?”的由来?/p> <p>  例如Q把字符buf =“0x80 0x40 0xb0 0xa1”q行new String(buf, "gb2312")操作Q得到的l果?#8220;"ufffd"u554a”Q再println出来Q得到的l果是“??#8221;Q因?#8220;0x80 0x40”是GBK中的字符Q在GB2312中没有?/p> <p>  再如Q把字符串String=""u00d6"u00ec"u00e9"u0046"u00bb"u00f9"q行new String (buf.getBytes("GBK"))操作Q得到的l果?#8220;3fa8aca8a6463fa8b4”Q其中,“"u00d6”?#8220;GBK”中没有对 应的字符Q得?#8220;3f”Q?#8220;"u00ec”对应着“a8ac”Q?#8220;"u00e9”对应着“a8a6”Q?#8220;0046”对应着“46”Q因是ASCII? W)Q?#8220;"u00bb”没找刎ͼ得到“3f”Q最后,“"u00f9”对应着“a8b4”。把q个字符串println一下,得到的结果是“?ìéF? ù”。看到没Q这里ƈ不全是问P因ؓGBK与Unicode映射的内容中除了汉字外还有字W,本例是最好的明证?/p> <p>  所以,在汉字{码时Q如果发生错乱,得到的不一定都是问号噢Q不q,错了l究是错了,50步和100步ƈ没有质的差别?/p> <p>  或者会问:如果源字W集中有Q而Unicode中没有,l果会如何?回答是不知道。因为我手头没有能做q个试的源字符集。但有一Ҏ肯定的,那就是源字符集不够规范。在Java中,如果发生q种情况Q是会抛出异常的?br /> <br /> 什么是UTF</p> <p>  UTFQ是Unicode Text Format的羃写,意ؓUnicode文本格式。对于UTFQ是q样定义的:</p> <p>  Q?Q如果Unicode?6位字W的?位是0Q则用一个字节表C,q个字节的首位是“0”Q剩下的7位与原字W中的后7位相同,?#8220;" u0034”Q?000 0000 0011 0100Q,?#8220;34” (0011 0100)表示Q(与源Unicode字符是相同的Q;</p> <p>  Q?Q如果Unicode?6位字W的?位是0Q则?个字节表C,首字节是“110”开_后面?位与源字W中除去?个零后的最? 位相同;W二个字节以“10”开_后面?位与源字W中的低6位相同。如“"u025d”Q?000 0010 0101 1101Q,转化后ؓ“c99d”Q?100 1001 1001 1101Q;</p> <p>  Q?Q如果不W合上述两个规则Q则用三个字节表C。第一个字节以“1110”开_后四位ؓ源字W的高四位;W二个字节以“10”开_后六? 为源字符中间的六位;W三个字节以“10”开_后六位ؓ源字W的低六位;?#8220;"u9da7”Q?001 1101 1010 0111Q,转化?#8220;e9b6a7”Q?110 1001 1011 0110 1010 0111Q;</p> <p>  可以q么描述JAVAE序中Unicode与UTF的关p,虽然不绝对:字符串在内存中运行时Q表CؓUnicode代码Q而当要保存到文g或其它介质中LQ用的是UTF。这个{化过E是由writeUTF和readUTF来完成的?/p> <p>  好了Q基性的差不多了Q下面进入正题?/p> <p>  先把q个问题x是一个黑匣子。先看黑匣子的一U表C:</p> <p>input(charsetA)->process(Unicode)->output(charsetB)</p> <p>  单,q就是一个IPO模型Q即输入、处理和<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>。同L内容要经q?#8220;从charsetA到unicode再到charsetB”的{化?/p> <p>  再看二表示Q?/p> <p>SourceFile(jsp,java)->class->output</p> <p>  在这个图中,可以看出Q输入的是jsp和java源文Ӟ在处理过E中Q以Class文g体,然后输出。再l化CU表C:</p> <p>jsp->temp file->class->browser,os console,db</p> <p>app,servlet->class->browser,os console,db</p> <p>  q个囑ְ更明白了。Jsp文g先生成中间的Java文gQ再生成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>  JSPQ从源文件到Class的过E?/p> <p>  Jsp的源文g是以“.jsp”l尾的文本文件。在本节中,阐qJSP文g的解释和~译q程Qƈ跟踪其中的中文变化?/p> <p>  1、JSP/Servlet引擎提供的JSP转换工具QjspcQ搜索JSP文g中用<%@ page contentType ="text/html; charset=<Jsp-charset>"%>中指定的charset。如果在JSP文g中未指定<Jsp- charset>Q则取JVM中的默认讄file.encodingQ一般情况下Q这个值是ISO8859-1Q?/p> <p>  2、jspc用相当于“javac –encoding <Jsp-charset>”的命令解释JSP文g中出现的所有字W,包括中文字符和ASCII字符Q然后把q些字符转换成Unicode? W,再{化成UTF格式Q存为JAVA文g。ASCII码字W{化ؓUnicode字符时只是简单地在前面加“00”Q如“A”Q{化ؓ“"u0041” Q不需要理由,Unicode的码表就是这么编的)。然后,l过到UTF的{换,又变?#8220;41”了!q也是可以使用普通文本编辑器查看由JSP生成? JAVA文g的原因;</p> <p>  3、引擎用相当?#8220;javac –encoding UNICODE”的命令,把JAVA文g~译成CLASS文gQ?/p> <p>  先看一下这些过E中中文字符的{换情c有如下源代码:</p> <p><%@ page contentType="text/html; charset=gb2312"%><br /> <html><body><br /> <%<br /> String a="中文";<br /> out.println(a);<br /> %><br /> </body></html> </p> <p>  q段代码是在UltraEdit for Windows上编写的。保存后Q?#8220;中文”两个字的16q制~码?#8220;D6 D0 CE C4”QGB2312~码Q。经查表Q?#8220;中文”两字的Unicode~码?#8220;"u4E2D"u6587”Q用 UTF表示是“E4 B8 AD E6 96 87”。打开引擎生成的由JSP文g转变而成的JAVA文gQ发现其中的“中文”两个字确实被“E4 B8 AD E6 96 87”替代了,再查看由JAVA文g~译生成的CLASS文gQ发现结果与JAVA文g中的完全一栗?/p> <p>  再看JSP中指定的CharSet为ISO-8859-1的情c?/p> <p><%@ page contentType="text/html; charset=ISO-8859-1"%><br /> <html><body><br /> <%<br /> String a="中文";<br /> out.println(a);<br /> %><br /> </body></html> </p> <p>  同样Q该文g是用UltraEdit~写的,“中文”q两个字也是存ؓGB2312~码“D6 D0 CE C4”。先模拟一下生成的JAVA文g和CLASS文g的过E:jspc用ISO-8859-1来解?#8220;中文”Qƈ把它映射到Unicode。由于ISO -8859-1?位的Q且是拉丁语p,其映规则就是在每个字节前加“00”Q所以,映射后的Unicode~码应ؓ“"u00D6"u00D0" u00CE"u00C4”Q{化成UTF后应该是“C3 96 C3 90 C3 8E C3 84”。好Q打开文g看一下,JAVA文g和CLASS文g中,“中文”果然都表CZؓ“C3 96 C3 90 C3 8E C3 84”?/p> <p>  如果上述代码中不指定<Jsp-charset>Q即把第一行写?#8220;<%@ page contentType="text/html" %>”QJSPC会用file.encoding的设|来解释JSP文g。在RedHat 6.2上,其处理结果与指定为ISO-8859-1是完全相同的?/p> <p>  到现在ؓ止,已经解释了从JSP文g到CLASS文g的{变过E中中文字符的映过E。一句话Q从“JspCharSet到Unicode再到UTF”。下表ȝ了这个过E:</p> <p>  ? “中文”从JSP到CLASS的{化过E?br /> <table align="center" border="1" cellpadding="0" cellspacing="0" width="90%"> <tbody> <tr> <td>Jsp-CharSet</td> <td>JSP文g?/td> <td>JAVA文g?/td> <td>CLASS文g?/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>无(默认Qfile.encodingQ?/td> <td>同ISO-8859-1</td> <td>同ISO-8859-1</td> <td>同ISO-8859-1</td> </tr> </tbody> </table> <br /> 下节先讨论Servlet从JAVA文g到CLASS文g的{化过E,然后再解释从CLASS文g如何输出到客L。之所以这样安排,是因为JSP和Servlet在输出时处理Ҏ是一L?/p> <p>  ServletQ从源文件到Class的过E?/p> <p>  Servlet源文件是?#8220;.java”l尾的文本文件。本节将讨论Servlet的编译过Eƈ跟踪其中的中文变化?/p> <p>  ?#8220;javac”~译Servlet源文件。javac可以?#8220;-encoding <Compile-charset>”参数Q意思是“?lt; Compile-charset >中指定的~码来解释Serlvet源文?#8221;?/p> <p>  源文件在~译Ӟ?lt;Compile-charset>来解释所有字W,包括中文字符和ASCII字符。然后把字符帔R转变成Unicode字符Q最后,把Unicode转变成UTF?/p> <p>  在Servlet中,q有一个地方设|输出流的CharSet。通常在输出结果前Q调用HttpServletResponse? setContentTypeҎ来达C在JSP中设|?lt;Jsp-charset>一L效果Q称之ؓ<Servlet- charset>?/p> <p>  注意Q文中一共提C三个变量Q?lt;Jsp-charset>?lt;Compile-charset>?lt; Servlet-charset>。其中,JSP文g只与<Jsp-charset>有关Q?lt;Compile- charset>?lt;Servlet-charset>只与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("<html>");<br /> out.println("#中文#");<br /> out.println("</html>");<br /> }<br /> } </p> <p>  该文件也是用UltraEdit for Windows~写的,其中?#8220;中文”两个字保存ؓ“D6 D0 CE C4”QGB2312~码Q?/p> <p>  开始编译。下表是<Compile-charset>不同ӞCLASS文g?#8220;中文”两字的十六进制码。在~译q程中,< Servlet-charset>不vM作用?lt;Servlet-charset>只对CLASS文g的输Z生媄响,实际上是 <Servlet-charset>?lt;Compile-charset>一P辑ֈ与JSP文g中的<Jsp- charset>相同的效果,因ؓ<Jsp-charset>对编译和CLASS文g的输出都会生媄响?/p> <p>  ? “中文”从Servlet源文件到Class的{变过E?br /> <table align="center" border="1" cellpadding="0" cellspacing="0" width="90%"> <tbody> <tr> <td>Compile-charset</td> <td>Servlet源文件中</td> <td>Class文g?/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中=“中文”)</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前面各加了一?0)</td> </tr> <tr> <td>无(默认Q?/td> <td>D6 D0 CE C4 (GB2312)</td> <td>同ISO-8859-1</td> <td>同ISO-8859-1</td> </tr> </tbody> </table> <br /> 普通JavaE序的编译过E与Servlet完全一栗?br /> <br /> CLASS文g中的中文表示法是不是昭然若揭了?OKQ接下来看看CLASS又是怎样输出中文的呢Q?br /> <br /> ClassQ输出字W串<br /> <br /> 上文说过Q字W串在内存中表现为Unicode~码。至于这UUnicode~码表示了什么,那要看它是从哪种字符集映过来的Q也是说要看它的祖先。这好比在托q行李时Q外观都是纸子Q里面装了什么就要看寄邮件的人实际邮了什么东ѝ?br /> <br /> 看看上面的例子,如果l一串Unicode~码“00D6 00D0 00CE 00C4”Q如果不作{换,直接用Unicode码表来对照它Ӟ是四个字W(而且是特D字W)Q假如把它与“ISO8859-1”q行映射Q则直接L 前面?#8220;00”卛_得到“D6 D0 CE C4”Q这是ASCII码表中的四个字符Q而假如把它当作GB2312来进行映,得到的结果很可能是一大堆qQ因为在GB2312中有可能没有Q也? 可能有)字符?0D6{字W对应(如果对应不上Q将得到0x3fQ也是问号Q如果对应上了,׃00D6{字W太靠前Q估计也是一些特D符P真正? 汉字在Unicode中的~码?E00开始)?br /> <br /> 各位看到了,同样的Unicode字符Q可以解释成不同的样子。当Ӟq其中有一U是我们期望的结果。以上例而论Q?#8220;D6 D0 CE C4”应该是我们所惌的,当把“D6 D0 CE C4”输出到IE中时Q用“<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>”方式查看Q就能看到清楚的“中文”两个字了。(当然了,如果你一定要?#8220;西欧字符”来看Q那也没办法Q你得不到M有何时何地的东西Qؓ什么呢Q因?#8220;00D6 00D0 00CE 00C4”本来是由ISO8859-1转化q去的?br /> <span><font size="3">  l出如下l论Q?br /> <br /> 在Class输出字符串前Q会Unicode的字W串按照某一U内码重新生成字节流Q然后把字节输入,相当于进行了一?#8220;String.getBytes(???)”操作???代表某一U字W集?br /> <br /> 如果是ServletQ那么,q种内码是在HttpServletResponse.setContentType()Ҏ中指定的内码Q也是上文定义的<Servlet-charsetQ?br /> <br /> 如果是JSPQ那么,q种内码是在<%@ page contentType=""%Q中指定的内码,也就是上文定义的QJsp-charsetQ?br /> <br /> 如果是JavaE序Q那么,q种内码是file.encoding中指定的内码Q默认ؓISO8859-1?br /> <br /> 当输出对象是览器时<br /> <br /> 以流行的览器IEZ。IE支持多种内码。假如IE接收C一个字节流“D6 D0 CE C4”Q你可以试用各U内码去查看。你会发现用“体中?#8221;时能得到正确的结果。因?#8220;D6 D0 CE C4”本来是体中文中“中文”两个字的~码?br /> <br /> OKQ完整地看一遍?br /> <br /> JSPQ源文g为GB2312格式的文本文Ӟ且JSP源文件中?#8220;中文”q两个汉?br /> <br /> 如果指定了<Jsp-charsetQؓGB2312Q{化过E如下表?br /> <br /> ? Jsp-charset = GB2312时的变化q程<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%">l果</td> </tr> <tr> <td>1</td> <td>~写JSP源文Ӟ且存为GB2312格式</td> <td>D6 D0 CE C4<br /> QD6D0=?CEC4=文)</td> </tr> <tr> <td>2</td> <td>jspc把JSP源文件{化ؓ临时JAVA文gQƈ把字W串按照GB2312映射到UnicodeQƈ用UTF格式写入JAVA文g?/td> <td>E4 B8 AD E6 96 87</td> </tr> <tr> <td>3</td> <td>把时JAVA文g~译成CLASS文g</td> <td>E4 B8 AD E6 96 87</td> </tr> <tr> <td>4</td> <td>q行Ӟ先从CLASS文g中用readUTFd字符Ԍ在内存中的是Unicode~码</td> <td>4E 2D 65 87Q在Unicode?E2D=?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中,q设|IE的编码ؓGB2312Q作者按Q这个信息隐藏在HTTP头中Q?/td> <td>D6 D0 CE C4</td> </tr> <tr> <td>7</td> <td>IE?#8220;体中?#8221;查看l果</td> <td>“中文”Q正显C)</td> </tr> </tbody> </table> <br /> 如果指定了<Jsp-charsetQؓISO8859-1Q{化过E如下表?br /> <br /> ? Jsp-charset = ISO8859-1时的变化q程<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%">l果</td> </tr> <tr> <td>1</td> <td>~写JSP源文Ӟ且存为GB2312格式</td> <td>D6 D0 CE C4<br /> QD6D0=?CEC4=文)</td> </tr> <tr> <td>2</td> <td>jspc把JSP源文件{化ؓ临时JAVA文gQƈ把字W串按照ISO8859-1映射到UnicodeQƈ用UTF格式写入JAVA文g?/td> <td>C3 96 C3 90 C3 8E C3 84</td> </tr> <tr> <td>3</td> <td>把时JAVA文g~译成CLASS文g</td> <td>C3 96 C3 90 C3 8E C3 84</td> </tr> <tr> <td>4</td> <td>q行Ӟ先从CLASS文g中用readUTFd字符Ԍ在内存中的是Unicode~码</td> <td>00 D6 00 D0 00 CE 00 C4<br /> Q啥都不是!Q!Q?/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中,q设|IE的编码ؓISO8859-1Q作者按Q这个信息隐藏在HTTP头中Q?/td> <td>D6 D0 CE C4</td> </tr> <tr> <td>7</td> <td>IE?#8220;西欧字符”查看l果</td> <td>qQ其实是四个ASCII字符Q但׃大于128Q所以显C出来的怪模怪样</td> </tr> <tr> <td>8</td> <td>改变IE的页面编码ؓ“体中?#8221;</td> <td>“中文”Q正显C)</td> </tr> </tbody> </table> <br /> 奇怪了Qؓ什么把QJsp-charsetQ设成GB2312和ISO8859-1是一个样的,都能正确昄Q因4?中的W?步和W?步互逆,是相?#8220;抉|”的。只不过当指定ؓISO8859-1Ӟ要增加第8步操作,Dؓ不便?br /> <br /> 再看看不指定QJsp-charsetQ?时的情况?br /> <br /> ? 未指定Jsp-charset 时的变化q程<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%">l果</td> </tr> <tr> <td>1</td> <td>~写JSP源文Ӟ且存为GB2312格式</td> <td>D6 D0 CE C4<br /> QD6D0=?CEC4=文)</td> </tr> <tr> <td>2</td> <td>jspc把JSP源文件{化ؓ临时JAVA文gQƈ把字W串按照ISO8859-1映射到UnicodeQƈ用UTF格式写入JAVA文g?/td> <td>C3 96 C3 90 C3 8E C3 84</td> </tr> <tr> <td>3</td> <td>把时JAVA文g~译成CLASS文g</td> <td>C3 96 C3 90 C3 8E C3 84</td> </tr> <tr> <td>4</td> <td>q行Ӟ先从CLASS文g中用readUTFd字符Ԍ在内存中的是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用发求时的页面的~码查看l果</td> <td>视情况而定。如果是体中文,则能正确昄Q否则,需执行?中的W??/td> </tr> </tbody> </table> <br /> ServletQ源文g为JAVA文gQ格式是GB2312Q源文g中含?#8220;中文”q两个汉?br /> <br /> 如果QCompile-charsetQ=GB2312Q<Servlet-charsetQ?GB2312<br /> <br /> ? Compile-charset=Servlet-charset=GB2312 时的变化q程<br /> <br /> <table align="center" border="1" cellpadding="0" cellspacing="0" width="90%"> <tbody> <tr> <td>序号</td> <td>步骤说明</td> <td>l果</td> </tr> <tr> <td>1</td> <td>~写Servlet源文Ӟ且存为GB2312格式</td> <td>D6 D0 CE C4<br /> QD6D0=?CEC4=文)</td> </tr> <tr> <td>2</td> <td>用javac –encoding GB2312把JAVA源文件编译成CLASS文g</td> <td>E4 B8 AD E6 96 87 QUTFQ?/td> </tr> <tr> <td>3</td> <td>q行Ӟ先从CLASS文g中用readUTFd字符Ԍ在内存中的是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;查看l果</td> <td>“中文”Q正显C)</td> </tr> </tbody> </table> <br /> 如果QCompile-charsetQ=ISO8859-1Q<Servlet-charsetQ?ISO8859-1<br /> <br /> ? Compile-charset=Servlet-charset=ISO8859-1时的变化q程<br /> <br /> <table align="center" border="1" cellspacing="0" width="90%"> <tbody> <tr> <td>序号</td> <td>步骤说明</td> <td>l果</td> </tr> <tr> <td>1</td> <td>~写Servlet源文Ӟ且存为GB2312格式</td> <td>D6 D0 CE C4<br /> QD6D0=?CEC4=文)</td> </tr> <tr> <td>2</td> <td>用javac –encoding ISO8859-1把JAVA源文件编译成CLASS文g</td> <td>C3 96 C3 90 C3 8E C3 84 QUTFQ?/td> </tr> <tr> <td>3</td> <td>q行Ӟ先从CLASS文g中用readUTFd字符Ԍ在内存中的是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;西欧字符”查看l果</td> <td>qQ原因同?Q?/td> </tr> <tr> <td>7</td> <td>改变IE的页面编码ؓ“体中?#8221;</td> <td>“中文”Q正显C)</td> </tr> </tbody> </table> <br /> 如果不指定Compile-charset或Servlet-charsetQ其默认值均为ISO8859-1?br /> <br /> 当Compile-charset=Servlet-charsetӞW?步和W?步能互逆,“抉|”Q显C结果均能正。读者可试着写一下Compile-charsetQ>Servlet-charset时的情况Q肯定是不正的?br /> <br /> 当输出对象是数据库时<br /> <br /> 输出到数据库Ӟ原理与输出到览器也是一L。本节只是ServletZQJSP的情况请读者自行推对{?br /> <br /> 假设有一个ServletQ它能接收来自客LQIEQ简体中文)的汉字字W串Q然后把它写入到内码为ISO8859-1的数据库中,然后再从数据库中取出q个字符Ԍ昄到客L?br /> <br /> ? 输出对象是数据库时的变化q程Q?Q?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%">l果</td> <td width="7%">?/td> </tr> <tr> <td>1</td> <td>在IE中输?#8220;中文”</td> <td>D6 D0 CE C4</td> <td rowspan="2">IE</td> </tr> <tr> <td>2</td> <td>IE把字W串转变成UTFQƈ送入传输中</td> <td>E4 B8 AD E6 96 87</td> </tr> <tr> <td>3</td> <td>Servlet接收到输入流Q用readUTFd</td> <td>4E 2D 65 87(unicode)</td> <td rowspan="4">Servlet</td> </tr> <tr> <td>4</td> <td>~程者在Servlet中必L字符串根据GB2312q原为字节流</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>把新生成的字W串提交lJDBC</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把接收到的字W串按照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">以下是从数据库中取出数的q程</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生成字符Ԍq提交给Servlet</td> <td>00 D6 00 D0 00 CE 00 C4 (Unicode)</td> <td> </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>~程者必L据数据库的内码ISO8859-1q原成原始字节流</td> <td>D6 D0 CE C4</td> <td> </td> </tr> <tr> <td>15</td> <td>~程者必L据客L字符集GB2312生成新的字符?/td> <td>4E 2D 65 87<br /> QUnicodeQ?/td> <td> </td> </tr> <tr> <td colspan="4"> <div align="center">Servlet准备把字W串输出到客L</div> </td> </tr> <tr> <td>16</td> <td>ServletҎQServlet-charsetQ生成字节流</td> <td>D6D0 CE C4</td> <td rowspan="2">Servlet</td> </tr> <tr> <td>17</td> <td>Servlet把字节流输出到IE中,如果已指定<Servlet-charsetQ,q会讄IE的编码ؓQServlet-charsetQ?/td> <td>D6 D0 CE C4</td> </tr> <tr> <td>18</td> <td>IEҎ指定的编码或默认~码查看l果</td> <td>“中文”Q正显C)</td> <td>IE</td> </tr> </tbody> </table> <br /> 解释一下,表中W?W?步和W?5W?6步是用红色标记的Q表Cq? 者来作{换。第4?两步其实是一句话Q?#8220;new String(source.getBytes("GB2312"), "ISO8859-1")”。第15?6两步也是一句话Q?#8220;new String(source.getBytes("ISO8859-1"), "GB2312")”。亲q读者,你在q样~写代码时是否意识到了其中的每一个细节呢Q?br /> <br /> 至于客户端内码和数据库内码ؓ其它值时的流E,和输出对象是pȝ控制台时的流E,误者自己想吧。明白了上述程的原理,怿你可以轻村֜写出来?br /> <br /> 行文xQ已可告一D落了。终点又回到了v点,对于~程者而言Q几乎是什么媄响都没有?br /> <br /> 因ؓ我们早就被告之要q么做了?br /> <br /> 以下l出一个结论,作ؓl尾?br /> <br /> 1? 在Jsp文g中,要指定contentTypeQ其中,charset的D与客L览器所用的字符集一P对于其中的字W串帔RQ不需做Q何内码{ 换;对于字符串变量,要求能根据ContentType中指定的字符集还原成客户端能识别的字节流Q简单地_是“字符串变量是ZQJsp- charsetQ字W集?#8221;Q?br /> <br /> 2? 在Servlet中,必须用HttpServletResponse.setContentType()讄charsetQ且讄成与客户端内码一_ 对于其中的字W串帔RQ需要在Javac~译时指定encodingQ这个encoding必须与编写源文g的^台的字符集一P一般说来都? GB2312或GBKQ对于字W串变量Q与JSP一P必须“是基于<Servlet-charsetQ字W集?#8221;?/span></p> <img src ="http://m.tkk7.com/sodar-fish/aggbug/175934.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/sodar-fish/" target="_blank">backup2007</a> 2008-01-17 14:34 <a href="http://m.tkk7.com/sodar-fish/articles/175934.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>~码问题2?/title><link>http://m.tkk7.com/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://m.tkk7.com/sodar-fish/articles/175931.html</guid><wfw:comment>http://m.tkk7.com/sodar-fish/comments/175931.html</wfw:comment><comments>http://m.tkk7.com/sodar-fish/articles/175931.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/sodar-fish/comments/commentRss/175931.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/sodar-fish/services/trackbacks/175931.html</trackback:ping><description><![CDATA[<div style="text-indent: 21pt;">Jsp面使用URL~码传递中文参数的情况下,在参数的解析q程中会出现q。由? java在设计的时候考虑C国际化的问题Q在java源程序编译成字节码的时候默认用的是UTF-8~码。而在webq用上,׃不同的浏览器向服? 器发送的信息采用的编码方式不同,在由像tomcat之类的服务器解码的时候会׃~码方式的不同而生ؕ码,q是一个会困扰jsp初学者很久的问题。以 前在使用struts的时候不需要处理这些问题,前些天在做一个简单的jsp面的时候碰到这个问题。经q半天的摸烦Q基本解决了该问题?/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;"><%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %></div> <div style="text-indent: 21pt;"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"></div> <div style="text-indent: 21pt;"><html xmlns="http://www.w3.org/1999/xhtml"></div> <div style="text-indent: 21pt;"><head></div> <div style="text-indent: 21pt;"><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></div> <div style="text-indent: 21pt;"><title>无标题文?lt;/title></div> <div style="text-indent: 21pt;"></head></div> <div style="text-indent: 21pt;"> </div> <div style="text-indent: 21pt;"><body></div> <div style="text-indent: 21pt;"><% </div> <div style="text-indent: 21pt;">       String str_test = "华工";</div> <div style="text-indent: 21pt;">%></div> <div style="text-indent: 21pt;"><form method=post action="b.jsp?test=<%=java.net.URLEncoder.encode(str_test) %>"> </div> <div style="text-indent: 21pt;">         <input type="submit" value="Submit" name="提交">   </div> <div style="text-indent: 21pt;"> </form></div> <div style="text-indent: 21pt;"> </div> <div style="text-indent: 21pt;"></body></div> <div style="text-indent: 21pt;"></html></div> <div style="text-indent: 21pt;"> </div> <div style="text-indent: 21pt;">b.jsp源代?/div> <div style="text-indent: 21pt;"><%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %></div> <div style="text-indent: 21pt;"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"></div> <div style="text-indent: 21pt;"><html xmlns="http://www.w3.org/1999/xhtml"></div> <div style="text-indent: 21pt;"><head></div> <div style="text-indent: 21pt;"><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></div> <div style="text-indent: 21pt;"><title>无标题文?lt;/title></div> <div style="text-indent: 21pt;"></head></div> <div style="text-indent: 21pt;"> </div> <div style="text-indent: 21pt;"><body></div> <div style="text-indent: 21pt;"> </div> <div style="text-indent: 21pt;"><% </div> <div style="text-indent: 21pt;">       String str = new String(request.getParameter("test").getBytes("ISO8859_1"));</div> <div style="text-indent: 21pt;">%> </div> <div style="text-indent: 21pt;"> <BR></div> <div style="text-indent: 21pt;"> <%=str %> </div> <div style="text-indent: 21pt;"></body></div> <div style="text-indent: 21pt;"></html></div> <div style="text-indent: 21pt;">说明Q在使用了java.net.URLEncoder.encode ~码后,面获取参数request.getParameter后需要用ISO8859_1~码转换。此外,在jsp的字W集声明中把charset=UTF-8也没有问?/div> <img src ="http://m.tkk7.com/sodar-fish/aggbug/175931.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/sodar-fish/" target="_blank">backup2007</a> 2008-01-17 14:30 <a href="http://m.tkk7.com/sodar-fish/articles/175931.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>~码问题1 ?/title><link>http://m.tkk7.com/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://m.tkk7.com/sodar-fish/articles/175929.html</guid><wfw:comment>http://m.tkk7.com/sodar-fish/comments/175929.html</wfw:comment><comments>http://m.tkk7.com/sodar-fish/articles/175929.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/sodar-fish/comments/commentRss/175929.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/sodar-fish/services/trackbacks/175929.html</trackback:ping><description><![CDATA[     摘要: HTMLQ?    ……     //实际上这里的charset=utf-8 也是可以的,因ؓ在中文^C     //用了GB2312     JSQ?    我用了两个方法提交:GET ?POST?...  <a href='http://m.tkk7.com/sodar-fish/articles/175929.html'>阅读全文</a><img src ="http://m.tkk7.com/sodar-fish/aggbug/175929.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/sodar-fish/" target="_blank">backup2007</a> 2008-01-17 14:29 <a href="http://m.tkk7.com/sodar-fish/articles/175929.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>vim 常用命o ?/title><link>http://m.tkk7.com/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://m.tkk7.com/sodar-fish/articles/170133.html</guid><wfw:comment>http://m.tkk7.com/sodar-fish/comments/170133.html</wfw:comment><comments>http://m.tkk7.com/sodar-fish/articles/170133.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/sodar-fish/comments/commentRss/170133.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/sodar-fish/services/trackbacks/170133.html</trackback:ping><description><![CDATA[1、vim颜色太暗Q默认的其是注释颜色太暗,Ҏ看不清,可通过下述方式讄<br /> :colorscheme evening<br /> <br /> 2、vim?6q制方式~辑文gQ?br /> :%!xxd<br /> <br /> 3、用vim格式化代?br /> 从别的编辑器里粘贴到vim里的代码l常׃不正常的~进变得格式混ؕQ有如下两种方式Q?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>上保留被~辑文g的内容:<br /> :set t_ti= t_te=<br /> <br /> 5、多文g~辑<br /> 打开多个文gQvim a.c b.c b.c<br /> 切换C一文gQn<br /> 切换到另一文gQe <文g名如b.c><br /> q回上一文gQ e#<br /> <br /> 横向分屏Qsplit Q不加参Cؓ分屏当前文gQ加文g名ؓ以分屏方式打开另一文gQ?br /> 竖向分屏QvsplitQ与split不同之处在于竖向分屏<br /> 分屏后切换:ctrl+两次按w<br /> <br /> 6、删除内容到~冲?br /> x为删除光标当前字W,而X则删除光标前字符Q?br /> dd为删除当前行Q?br /> nxQnXQndd则表明删除的数目Q?br /> <br /> 7、拷贝内容到~冲?br /> yyQؓ拯当前行到~冲区;<br /> ywQؓ拯单个词到~冲区;<br /> nyyQnyw则表明拷贝的数目Q?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("Ud","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;">Ud</strong></nobr>到某一行:<br /> : nQn?br /> ?br /> nGQn?br /> <br /> 9、visual~辑<br /> 三种q入方式Q?br /> v ---- 以字Wؓ单位q行选择<br /> V ---- 以行为单位进行选择<br /> ctrl+v ---- 以列块方式进行选择<br /> ctrl+c ---- 退出visual~辑方式<br /> <br /> q入后对选择q行的操作有Q?br /> d --- 删除<br /> y --- 复制<br /> > --- 右移4?br /> < --- 左移4?br /> ~ --- 大小写切?br /> U --- 变成大写<br /> u --- 变成写</td> </tr> </tbody> </table> <img src ="http://m.tkk7.com/sodar-fish/aggbug/170133.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/sodar-fish/" target="_blank">backup2007</a> 2007-12-24 18:33 <a href="http://m.tkk7.com/sodar-fish/articles/170133.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>quote : installnation of eclipse for javahttp://m.tkk7.com/sodar-fish/articles/170109.htmlbackup2007backup2007Mon, 24 Dec 2007 09:21:00 GMThttp://m.tkk7.com/sodar-fish/articles/170109.htmlhttp://m.tkk7.com/sodar-fish/comments/170109.htmlhttp://m.tkk7.com/sodar-fish/articles/170109.html#Feedback0http://m.tkk7.com/sodar-fish/comments/commentRss/170109.htmlhttp://m.tkk7.com/sodar-fish/services/trackbacks/170109.html

1. 下蝲文g
JDK    jdk-1_5_0_06-linux-i586-rpm.bin  http://java.sun.com
eclipse    eclipse-SDK-3.1.2-linux-gtk.tar.gz  http://www.eclipse.org
CDT    org.eclipse.cdt-3.0.2-linux.x86.tar.gz  http://www.eclipse.org/cdt

2. 安装JDK

chmod +x jdk-1_5_0_06-linux-i586-rpm.bin
./jdk-1_5_0_06-linux-i586-rpm.bin

讄环境变量Q编?etc/profileQ在下面加入

export JAVA_HOME=/usr/java/jdk1.5.0_06
export PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:/usr/java/jdk1.5.0_06/lib/tools.jar:$CLASSPATH
export CLASSPATH

3. 安装eclipse

tar -zxvf eclipse-SDK-3.1.2-linux-gtk.tar.gz

再移动到惌的目录中Q这里ؓ/opt
~写一个执行脚本,内容如下Q?/p>

#eclipse
#
export JAVA_HOME=/usr/java/jdk1.5.0_06
export CLASSPATH=/usr/java/jdk1.5.0_06/lib
/opt/eclipse/eclipse -vm /usr/java/jdk1.5.0_06/bin/java -data ~/workspace &

cp eclipse.sh /usr/local/bin
chmod 755 /usr/local/bin/eclipse.sh

eclipse.sh d到桌面。桌面上按下鼠标右键Q在弹出菜单中选择“创徏启动?#8221;Q在“名称”中输入Eclipse?#8220;命o”中填 /usr/local/bin/eclipse.shQ按“定”Q桌面上有eclipse的快h式了Q以后可以直接双击这个图标启? Eclipse?

4. 安装CDT

tar -zxvf org.eclipse.cdt-3.0.2-linux.x86.tar.gz

相映目录中的文件cp到eclipse目录?/p>




---------------------

先要在linux下安装好jreQ我的jre的安装目录是/usr/java/jre1.5

把下载的文g解压卛_Q?/span>

#tar -zxvf eclipse-SDK-3.2-linux-gtk.tar.gzQ可以加上绝对\径)

3 每个用户都可以执?/span>EclipseQ编?/span>Eclipse.sh脚本Q?/span>

#!/bin/bash

#

#exe eclipse3.2

#

/usr/eclipse/eclipse -vm /usr/java/jre1.5/bin/java -data ~/workspace &

# -vm 参数用以指定使用哪一?/span> jvm 来执?/span>EclipseQ?/span>

# -date参数用以指定Eclipse的数据目录。在此指定其存在用户根目?/span>(~)下的workspace目录?/span>

?/span>eclipse.sh 复制?/span>/usr/local/bin中,qؓ它加上权?/span>755Q现在执?/span> eclipse.sh 卛_启动 Eclipse?/span>

4桌面上徏立快h式:

在桌面上按下鼠标右键Q在弹出菜单中选择“新增启动”Q之后分別在“名称”中输?/span>Eclipse3.2Q?#8220;命o”中填 /usr/local/bin/eclipse.shQ然后再为它随便找个喜欢的图标(我用的是/opt/eclipse/icon.xpmQ?/span>;再后?/span>“定”Q桌面上有eclipse的快h式了Q以后可以直接双击这个图标启?/span>Eclipse?/span>


backup2007 2007-12-24 17:21 发表评论
]]>
?eclipse3.3 + minGW for c/c++ developmenthttp://m.tkk7.com/sodar-fish/articles/170001.htmlbackup2007backup2007Mon, 24 Dec 2007 03:51:00 GMThttp://m.tkk7.com/sodar-fish/articles/170001.htmlhttp://m.tkk7.com/sodar-fish/comments/170001.htmlhttp://m.tkk7.com/sodar-fish/articles/170001.html#Feedback0http://m.tkk7.com/sodar-fish/comments/commentRss/170001.htmlhttp://m.tkk7.com/sodar-fish/services/trackbacks/170001.html
因ؓCDT只提供了开发C/C++目的IDEQ所以我们需要安装MinGWQ即 Minimalist GNU For Windows。它是一些头文g和端口库的集合,该集合允思h们在没有W三方动态链接库的情况下使用 GCCQGNU Compiler CQ?Windows32 E序。)和MSYSQMinimal GNUQPOSIXQsystem on WindowsQ是一个小型的GNU环境Q包括基本的bashQmake{等。是Windows下最优秀的GNU环境。)Q?
下蝲Automated MinGW Installer:MinGW-5.1.3.exeQ注意这只是个在U安装程序)Q执行MinGW-5.1.3.exeQ?
在choose package向导,选择Current;
在choose components向导,选中MinGW base tools和g++ compiler;
在choose install location向导,讄安装目录Qؓ说明方便Q这里假设\径ؓd:\MinGWQ?
{待MinGW在线安装完成?
接下来,在下载MinGW的同一面Q我们下载MSYS (Minimal System):Current Release: msys-1.0.10Q执行MSYS-1.0.10.exeQ?
在安装MSYSq程中,假定我们安装路径为D:\msys;
在安装MSYSq程中,会出现控制台界面Q类DOSH口Q的三个询问Q分别键入y、y、D:/MinGWQMinGW安装路径Q即可?
安装好MinGW和MYYS后,需要配|一下系l的环境变量Q右键点?#8220;我的电脑”->属?>高->环境变量Q在pȝ变量中进行如下操作:
~辑PATH变量Q在开头处加入D:\MinGW\bin;D:\msys\1.0\bin;
dLIBRARY_PATH变量QgؓD:\MinGW\lib
dC_INCLUDE_PATH变量QgؓD:\MinGW\include
dCPLUS_INCLUDE_PATH变量Qgؓ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
打开pȝ开始菜?>附g->命o提示W,在里面输入make –version或gcc –versionq回车,如果出现版本信息Q则配置成功?
如果你的pȝ上没有安装jreQ去下蝲最新版的jre5.0Qƈq行安装?
接下来这步,我们先进入到http://www.eclipse.org/downloads/面Q最好直接下载Eclipse IDE for C/C++ Developers - Windows (62 MB) q个版本Q基本上下蝲完后可以正怋用?br />
如果你已l有了eclipse3.3但需要单独安装CDT4的话Q请参见q里CDT Europa Releases Update SiteQ里面说的很清楚Q可以在eclipse的help->Software Updates -> Find and Install -> Search for new Features to Install中,加入一个site http://download.eclipse.org/tools/cdt/releases/europa升卛_?br />
值得注意的是Q不要直接下载cdt-master-4.0.0.zipQƈ且解压羃后覆盖到eclipse目录下!Q否则虽然可以调出CDT界面Q但~译和执行会有问题?

最后,我们启动eclipseq进行一个测试,创徏一个C++ ProjectQ选择Executable->Hello World C++ ProjectQtoolchain选择MinGW GCC。创建后build它即可?

backup2007 2007-12-24 11:51 发表评论
]]>
bootSect.S 文g中的include问?/title><link>http://m.tkk7.com/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://m.tkk7.com/sodar-fish/articles/167573.html</guid><wfw:comment>http://m.tkk7.com/sodar-fish/comments/167573.html</wfw:comment><comments>http://m.tkk7.com/sodar-fish/articles/167573.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/sodar-fish/comments/commentRss/167573.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/sodar-fish/services/trackbacks/167573.html</trackback:ping><description><![CDATA[<p>?Linux 启动q程中,最开始加载的E序是 bootSect.S 文g.</p> <p>其中W一行是一个include 语句Q?include <asm/boot.h><br /> 而当我去查看boot.h的时候,发现它的真正位置?nbsp;"include/asm-i386/boot.h" 而不?"include/ asm/boot.h"</p> <p>q让我很不解,查网上资料也没有解答, 打开makefile文g,仔细看了一?l于扑ֈ原因:</p> <p>在makefile 中有q么一D?</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" />    rm </span><span style="color: #000000">-</span><span style="color: #000000">f 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" />    ( cd include ; ln </span><span style="color: #000000">-</span><span style="color: #000000">sf asm</span><span style="color: #000000">-</span><span style="color: #000000">$(ARCH) asm)<br /> <img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />    @if [ </span><span style="color: #000000">!</span><span style="color: #000000"> </span><span style="color: #000000">-</span><span style="color: #000000">d include</span><span style="color: #000000">/</span><span style="color: #000000">linux</span><span style="color: #000000">/</span><span style="color: #000000">modules ]; then <br /> <img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        mkdir include</span><span style="color: #000000">/</span><span style="color: #000000">linux</span><span style="color: #000000">/</span><span style="color: #000000">modules; <br /> <img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />    fi</span></div> </div> <p>很明?首先删除?asm文g?然后 在include 下面做了一个Yq接: ln -sf asm-$(ARCH)  asm</p> <p>q里的ARCH明显是系l相关的环境变量了,比如在i386机器上就是代表i386了。这样asm-i386p{成了asm.</p> <img src ="http://m.tkk7.com/sodar-fish/aggbug/167573.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/sodar-fish/" target="_blank">backup2007</a> 2007-12-13 18:23 <a href="http://m.tkk7.com/sodar-fish/articles/167573.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>putty 登陆unix-center ubuntu服务?输入中文http://m.tkk7.com/sodar-fish/articles/167219.htmlbackup2007backup2007Wed, 12 Dec 2007 06:10:00 GMThttp://m.tkk7.com/sodar-fish/articles/167219.htmlhttp://m.tkk7.com/sodar-fish/comments/167219.htmlhttp://m.tkk7.com/sodar-fish/articles/167219.html#Feedback0http://m.tkk7.com/sodar-fish/comments/commentRss/167219.htmlhttp://m.tkk7.com/sodar-fish/services/trackbacks/167219.html 服务器上的ubuntu默认是GBK字符集,
把putty 的fontҎ宋体,chinese_GB2312字符集,
transition 里面保留默认Use font encoding ?br /> 重新登陆卛_?

登陆 solaris 服务器我q没扑ֈ输入中文的方法?br />
[在~/ 建立.profile 建立环境变量]

backup2007 2007-12-12 14:10 发表评论
]]>
solaris VIMhttp://m.tkk7.com/sodar-fish/archive/2007/12/12/167136.htmlbackup2007backup2007Wed, 12 Dec 2007 01:58:00 GMThttp://m.tkk7.com/sodar-fish/archive/2007/12/12/167136.htmlhttp://m.tkk7.com/sodar-fish/comments/167136.htmlhttp://m.tkk7.com/sodar-fish/archive/2007/12/12/167136.html#Feedback0http://m.tkk7.com/sodar-fish/comments/commentRss/167136.htmlhttp://m.tkk7.com/sodar-fish/services/trackbacks/167136.html : http://www.linuxdiyf.com
  我自q机器?linux, ssh q程dsolarispȝ, l果发现不管我?xterm q是 linux console, ?solaris 上都无法?vim ?insert 模式下正识别方向键.

  ?normal 模式下方向键工作正常, 可一旦进?insert 模式, ׃行了. 比如按向上方向键, 其结果是插入一个新? q输入A, 其实是把向上键?escape sequence("ESC O A")当做了三ơ按? 而不是把它当做方向键.

  而且无论我把 TERM 讄?vt100 q是 xterm, 都是一Ll果.

  查找了半天资? 发现我犯了一个愚蠢而低U的错误. 应该?vim q行?非兼Ҏ式下, 插入模式中才支持方向?

  ?.vimrc 中加入set nocompatible

  卛_.

  实际上登录一个新pȝ? 更好的做法是?vim 自带的一个示?vimrc 复制到自q目录? 做法是在vim中输?br />
  :!cp -i $VIMRUNTIME/vimrc_example.vim ~/.vimrc


backup2007 2007-12-12 09:58 发表评论
]]>
վ֩ģ壺 ĻѹۿƵ| ޾Ƶ| ëƬһƵѲ | ޳aƬ߹ۿĶ| Ƶ| ޹Ʒþ| ޾Ʒ˾þվ| aػƵƬƵ| Ʒ| AŮAVۺϾþþ| պĻһҳ| ޳˻ɫ߹ۿ| žžþþƷѿС˵| AžƷһ| һëƬaѲɫӰ| ۺϽ| һaëһaƵ| AV볱߹ۿ| ޷츾| ˳߲| ߹ۿƵ| һѻɫëƬ| һ| ձһ| ŮƵ| ëƬۿ| ˵Ӱ| ԻƤȫƵѹ30| ҹWWWʪˬ| ˾þô߽ۺͼƬ| ѹۿ˾þѹۿ| ഺɫУ԰С˵| ؼƬѿ| 91Ƶ| ɫžžþWWWۺ| avƬһ| һƵѸ| һĻ| ޹Ʒyw | avӰԺһ| ߹ۿҹһ|