作者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
推 infor:厲害 06/03 11:33
→ slalala:html parser套件都能夠針對page取得charset等資訊 06/03 15:29
推 slalala:因此程式不用寫死 讓套件內建的方法判定charset即可 06/03 15:32
推 Holocaust123:元PO真神人也....m(_ _)m 06/03 19:00
推 Holocaust123:這樣cmd就沒辦法了,因為cmd預設是Big-5且無法更改.. 06/03 19:04
推 kene:哪有, 我上篇的推文就可以動啊 06/03 20:01
→ sbrhsieh:kene 講的方式在只面對單一編碼的數據時,確實是對的 06/03 20:48
→ sbrhsieh:那方法等於是變更預設編碼。 06/03 20:49
推 kene:的確, 遇到多重編碼的環境就會爆炸 XD 06/03 21:15
推 Holocaust123:k大的方法成功了,可以請問甚麼是多重編碼環境嗎@@? 06/03 22:18