﻿<?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-Mister4</title><link>http://www.blogjava.net/qumenglin218/</link><description>突破，从积累开始</description><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 13:24:41 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 13:24:41 GMT</pubDate><ttl>60</ttl><item><title>文件是怎样的？</title><link>http://www.blogjava.net/qumenglin218/archive/2012/06/21/381231.html</link><dc:creator>Mister4</dc:creator><author>Mister4</author><pubDate>Thu, 21 Jun 2012 01:14:00 GMT</pubDate><guid>http://www.blogjava.net/qumenglin218/archive/2012/06/21/381231.html</guid><wfw:comment>http://www.blogjava.net/qumenglin218/comments/381231.html</wfw:comment><comments>http://www.blogjava.net/qumenglin218/archive/2012/06/21/381231.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qumenglin218/comments/commentRss/381231.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qumenglin218/services/trackbacks/381231.html</trackback:ping><description><![CDATA[昨天晚上突然想起文件这个东西，文件应该是操作系统最基本的单位，文件应该是 数据+相关属性（打开方式，最后修改时间，数据存储的位置等等）<img src ="http://www.blogjava.net/qumenglin218/aggbug/381231.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qumenglin218/" target="_blank">Mister4</a> 2012-06-21 09:14 <a href="http://www.blogjava.net/qumenglin218/archive/2012/06/21/381231.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>谈谈java中的字符乱码问题</title><link>http://www.blogjava.net/qumenglin218/articles/367861.html</link><dc:creator>Mister4</dc:creator><author>Mister4</author><pubDate>Wed, 04 Jan 2012 09:28:00 GMT</pubDate><guid>http://www.blogjava.net/qumenglin218/articles/367861.html</guid><wfw:comment>http://www.blogjava.net/qumenglin218/comments/367861.html</wfw:comment><comments>http://www.blogjava.net/qumenglin218/articles/367861.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qumenglin218/comments/commentRss/367861.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qumenglin218/services/trackbacks/367861.html</trackback:ping><description><![CDATA[<div><div>乱码问题经常碰到，而且每次都要花很久时间才能解决。最近想搞清楚一些实质性的东西，看了一些关于这方面的资料，在这里做个记录</div><div></div><div>&nbsp; &nbsp; 造成字符乱码问题的原因有两个：</div><div>&nbsp; &nbsp; 1是编码很解码的方式不一致，</div><div>&nbsp; &nbsp; 2是采用了错误的编码造成数据丢失。</div><div>&nbsp; &nbsp; 由于计算机的最小存储单元是字节即8位二进制数，中文是无法在内存中直接表示的，所以从字符到字节就需要通过某个规则转换即编码</div><div>&nbsp; &nbsp;编码方式有很多 我比较常用的是utf-8 GBK iso-8859-1和ASCII，这些都可以看成是字典表。</div><div>&nbsp; &nbsp;比如我用utf-8的方式去编码字符串"你好"</div><div><div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; border-image: initial; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp; &nbsp; &nbsp; &nbsp; String&nbsp;str&nbsp;=&nbsp;"你好";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">byte</span>[]&nbsp;utf8&nbsp;=&nbsp;str.getBytes("utf-8");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">byte</span>&nbsp;b&nbsp;:&nbsp;utf8){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print("&nbsp;&nbsp;"+b);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</div></div><div>&nbsp; &nbsp; 输出的结果是: &nbsp; -28 &nbsp;-67 &nbsp;-96 &nbsp;-27 &nbsp;-91 &nbsp;-67</div><div>&nbsp; &nbsp; 说明&#8220;你好&#8221;这个字符串被编码成了 6个字节,utf-8是用三个字节表示一个中文字符的，这种转换过程相当于我们查字典</div><div>&nbsp; &nbsp; 如果用GBK编码</div><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp; &nbsp; &nbsp; &nbsp; String&nbsp;str&nbsp;=&nbsp;"你好";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">byte</span>[]&nbsp;gbk&nbsp;=&nbsp;str.getBytes("GBK");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">byte</span>&nbsp;b&nbsp;:&nbsp;gbk){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print("&nbsp;&nbsp;"+b);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</div></div><div>&nbsp; &nbsp; 得到的结果是: &nbsp;-60 &nbsp;-29 &nbsp;-70 &nbsp;-61 &nbsp; GBK是用两个字节表示一个中文字符的（需要注意getBytes()这个方法有两种形式 一个是带参数一个不带参数，</div><div>&nbsp; &nbsp; 不带参用系统默认编码，中文windows操作系统一般都是GBK &nbsp;一种查看系统编码的方式是用命令行chcp 936表示GBK）</div><div>&nbsp; &nbsp; 到这里我们就可以解释我们的第一个原因</div><div>&nbsp; &nbsp; 比如我们用从网络中去抓取数据的时候，对方用GBK方式进行编码，我们拿到字节流的时候用utf-8进行解码，</div><div>&nbsp; &nbsp; 百度用的是GBK编码</div><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp; &nbsp; &nbsp; &nbsp; URL&nbsp;url&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;URL("http://www.baidu.com/");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URLConnection&nbsp;connection&nbsp;=&nbsp;url.openConnection();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;inputStream&nbsp;=&nbsp;connection.getInputStream();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStreamReader&nbsp;reader&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;InputStreamReader(inputStream,&nbsp;"utf-8");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BufferedReader&nbsp;bufferedReader&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;BufferedReader(reader);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("bufferedReader&nbsp;=&nbsp;"&nbsp;+&nbsp;bufferedReader.readLine());</div></div><div>&nbsp; &nbsp; &nbsp;得到的结果是:</div><div>&nbsp; &nbsp; &nbsp;bufferedReader = &lt;!doctype html&gt;&lt;html&gt;&lt;head&gt;&lt;meta http-equiv="Content-Type" content="text/html;charset=gb2312"&gt;&lt;title&gt;????????????? &nbsp;。。。。</div><div>&nbsp; &nbsp; &nbsp;如果是GBK解码字节流得到如下的结果</div><div>&nbsp; &nbsp; &nbsp;&lt;!doctype html&gt;&lt;html&gt;&lt;head&gt;&lt;meta http-equiv="Content-Type" content="text/html;charset=gb2312"&gt;&lt;title&gt;百度一下，你就知道 。。。。</div><div>&nbsp; &nbsp; &nbsp;由于编解码方式不一致，utf8去解码字节流的时候从&#8220;字典&#8221;中查不到相应的字符，</div><div>&nbsp; &nbsp; &nbsp;默认（有几种 &nbsp;&#8220;?"也是我们经常见到的一种）用U+003F代替 即 &#8220;?&#8221;</div><div>&nbsp; &nbsp; &nbsp;这里有个问题我还没有搞清楚,我用GBK编码&#8221;你好&#8220;再用utf-8解码得到的是3个&#8221;?&#8220; &nbsp;为什么是3个"？"</div><div></div><div>&nbsp; &nbsp; &nbsp;如果了解utf-8 GBK和iso-8859-1等这些的具体编码方式，第二个问题就比较清楚了。</div><div>&nbsp; &nbsp; &nbsp;比如iso-8859-1是单字节编码的，比起ASSCII，iso-8859-1把一个字节的最高位也纳入进来表示字符，但是最多也只有256个字符，</div><div>&nbsp; &nbsp; &nbsp;实际上它是在ASSCII基础之上加入了一些西欧字符，并没有加入中文，所以iso-8859-1也不能表示中文，如果我们这么写</div><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp; &nbsp; &nbsp;String&nbsp;str&nbsp;=&nbsp;"你好";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">byte</span>[]&nbsp;bytes&nbsp;=&nbsp;str.getBytes("iso-8859-1");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("bytes&nbsp;=&nbsp;"&nbsp;+&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;String(bytes,"utf-8"));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">////</span><span style="color: #008000; ">/输出&nbsp;??</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("bytes&nbsp;=&nbsp;"&nbsp;+&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;String(bytes,"GBK"));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">////</span><span style="color: #008000; ">/输出&nbsp;??</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("bytes&nbsp;=&nbsp;"&nbsp;+&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;String(bytes,"iso-8859-1"));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">////</span><span style="color: #008000; ">/输出&nbsp;??</span></div></div><div>&nbsp; &nbsp; &nbsp;由于在&#8220;字典&#8221;中找不到相应的值，就用3f替代 我们用上面的方式打印 得到的都会是"??"，</div><div></div><div>&nbsp; &nbsp; java用的是Unicode编码,API中Character类下有描述：&#8220;字符信息基于 Unicode 标准，版本 4.0。。。&#8221;</div><div></div><div>&nbsp; &nbsp; 更实际的Web编程中遇到的浏览器显示乱码和应用程序接收提交过去的乱码问题以下博客中都有详细的描述，</div><div>&nbsp; &nbsp; 解决问题总得规则是编码方式和解码方式最好保持一致，然后再找出传输过程中那些地方是有编解码的。<br /><br />&nbsp; &nbsp; 参考链接：<a href="http://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/index.html?ca=drs-" title="深入分析 Java 中的中文编码问题" target="_blank">深入分析 Java 中的中文编码问题<br /></a>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<a href="http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html" title="字符编码笔记：ASCII，Unicode和UTF-8" target="_blank">字符编码笔记：ASCII，Unicode和UTF-8</a><br /></div></div><img src ="http://www.blogjava.net/qumenglin218/aggbug/367861.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qumenglin218/" target="_blank">Mister4</a> 2012-01-04 17:28 <a href="http://www.blogjava.net/qumenglin218/articles/367861.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>让cookie失效</title><link>http://www.blogjava.net/qumenglin218/articles/353410.html</link><dc:creator>Mister4</dc:creator><author>Mister4</author><pubDate>Thu, 30 Jun 2011 01:56:00 GMT</pubDate><guid>http://www.blogjava.net/qumenglin218/articles/353410.html</guid><wfw:comment>http://www.blogjava.net/qumenglin218/comments/353410.html</wfw:comment><comments>http://www.blogjava.net/qumenglin218/articles/353410.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qumenglin218/comments/commentRss/353410.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qumenglin218/services/trackbacks/353410.html</trackback:ping><description><![CDATA[昨天碰到一个问题，如何让cookie失效<br />我用cookie判断用户是否登录<br />登录的时候设置<br /><div><div>Cookie cookie = new Cookie("<div style="display: inline-block; "></div>ladysession_id","XXX");</div><div>cookie.setMaxAge(60 * 60 * 24);</div><div>cookie.setPath("/");</div><div>response.addCookie(cookie);<br />退出的时候需要这样设置<br /><div><div>Cookie ck = new Cookie("ladysession_id", "1213");</div><div>ck.setPath("/");</div><div>ck.setMaxAge(0);</div><div>response.addCookie(ck);<br />这里需要注意的就是如果登录的时候设置了domain 退出也要设置想通的domain，设置的所有属性都需要保持一致。然后把过期时间设置位0<br />这样客户端在下次请求的时候服务器端就得不到这个cookie了<br /><br />当然也可以把cookie的值设置成null或者&#8220;&#8221;，服务器判断。<br /><div><div>&nbsp;Cookie cookie = new Cookie("ladysession_id","");</div><div>&nbsp;cookie.setMaxAge(60*60*24);</div><div>&nbsp;cookie.setPath("/");<br />response.addCookie(cookie);</div></div></div></div></div></div><img src ="http://www.blogjava.net/qumenglin218/aggbug/353410.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qumenglin218/" target="_blank">Mister4</a> 2011-06-30 09:56 <a href="http://www.blogjava.net/qumenglin218/articles/353410.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>