作者sbrhsieh (sbr)
看板java
标题Re: [问题] eclipse的结果正确,javac的结果错误
时间Tue Jun 2 20:47:19 2009
※ 引述《Holocaust123 (Terry)》之铭言:
: ※ 引述《ogamenewbie (._.)》之铭言:
: : 基本上,因为你很多地方没有讲得很清楚,
: : 所以我中间随口问问,你就随便参考看看。
: 真是抱歉QQ,我再讲清楚一点,顺便把我的code上传到免空了
: http://www.badongo.com/file/15256049
: 不贴code是怕复制贴上後编码有问题,所以我把整个java档压缩上传。
: 这个 main.java 档案的编码是 UTF-8。
问题出在这里。
main.java line 57:
br = new BufferedReader(new InputStreamReader((InputStream)obj));
这样子是以系统预设的编码(encoding)来建立 InputStreamReader,应该要使用
网页 response 的 Content-Type header value 指定的 charset。
比如 Yahoo 知识这一页:
http://tw.knowledge.yahoo.com/question/question?qid=1509051800784
Content-Type 是 "text/html; charset=utf-8",你就要使用 UTF-8 来 decode
网页的输出(byte sequence)。
你现在的程式如果在一个预设 encoding 不是 UTF-8 的 JRE 环境执行,在使用
BufferedReader 读取网页输出时会失真,使用 regular expression 当然也就无法
正确找出你要的资讯。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.173.143.200
1F:推 infor:厉害 06/03 11:33
2F:→ slalala:html parser套件都能够针对page取得charset等资讯 06/03 15:29
3F:推 slalala:因此程式不用写死 让套件内建的方法判定charset即可 06/03 15:32
4F:推 Holocaust123:元PO真神人也....m(_ _)m 06/03 19:00
5F:推 Holocaust123:这样cmd就没办法了,因为cmd预设是Big-5且无法更改.. 06/03 19:04
6F:推 kene:哪有, 我上篇的推文就可以动啊 06/03 20:01
7F:→ sbrhsieh:kene 讲的方式在只面对单一编码的数据时,确实是对的 06/03 20:48
8F:→ sbrhsieh:那方法等於是变更预设编码。 06/03 20:49
9F:推 kene:的确, 遇到多重编码的环境就会爆炸 XD 06/03 21:15
10F:推 Holocaust123:k大的方法成功了,可以请问甚麽是多重编码环境吗@@? 06/03 22:18