java 板


LINE

※ 引述《if4 (逍遙遊)》之銘言: : 之前...有人發問題文...問 netbeans 下遇到亂碼的問題... : 我也遇到... : 也請教過我的老師... : 他也沒解決... : 我現在不算已經解決...在 netbeans 下我依然有亂碼... : 但是我今天把 jar 弄出來後... : 執行... : 意外的發現沒有亂碼...這算是已經解決了嗎?我也不知道...但是以 jar 形式 : 執行...確實沒有亂碼... : 有亂碼的... : http://i303.photobucket.com/albums/nn131/if930/nbj01.jpg
: 沒亂碼的... : http://i303.photobucket.com/albums/nn131/if930/nbj02.jpg
: 部分程式碼... : http://pastebin.com/1sQCNgTb 這事情有沒有解決的關鍵是:你知不知道怎麼弄出亂碼的呢? 如果你知道弄成亂碼的『原因』並推測出正確顯示的條件才是『解』 若是胡亂弄了,恰好發現能正常顯示,那只是 work around。 首先,來談一下你的程式碼跟可以 reproduce 的程式有什麼差別。 0. 交待 reproduce 的環境與步驟 1. 程式必需可以執行且微小,但足夠用來演示你的問題。 關於 0. 在你的文章中可以找到相關的線索, 但若您能明確交待會是更好的發問型式。 關於 1. 你的程式無法執行,會讓想要協助你的人,多一道障礙。 通常是太閒的人才會去試著看它, 例如:像我這樣腳扭傷在家哪都不能去的閒人。。 稍為整理一下,會像這樣: http://pastebin.com/1bZnTFBj (只要剪下貼上到 IDE 內就能跑了。) 不過事實上只要: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; public class ShowData { public static void main(String[] args) throws IOException { URL httpurl = new URL("http://tw.stock.yahoo.com/q/q?s=0050"); BufferedReader br = new BufferedReader( new InputStreamReader(httpurl.openStream())); String tmp; while ((tmp = br.readLine()) != null) { System.out.println(tmp); } br.close(); } } 如果你沒有簡化到這個步驟, 能推測你可能未用過 debug 去檢查是不是源頭就出問題了。 因為當你簡化到這步驟,你的問題範圍就會縮小到 『為什麼 BufferedReader 在 NetBeans 下會產生亂碼, 在 Windows Command Line 下卻不會呢』 不確定你在向老師提問時有沒有提到,你使用到 Reader。 因為一旦牽涉到 Reader 就會需要指定正確的編碼。 你的情況是未指定,那麼程式執行時就會參考目前 JVM 的編碼: http://caterpillar.onlyfun.net/Gossip/Encoding/JVMEncoding.html 以你程式的情況來說,是沒有指定編碼的,能由你的執行結果推測: 1. 在 Windows Command Line 下取得的預設編碼恰能正確顯示文字 2. NetBeans 啟動的 JVM 預設編碼與 Windows Command Line 執行時不同 要驗證這個想法,那當然是寫程式出目前的 encoding: import java.nio.charset.Charset; public class ShowEncoding { public static void main(String[] args) { System.out.println("encoding: " + Charset.defaultCharset()); } } 你得分別在 NetBeans 與 Windows Command Line 下執行, 以 osx 選中文語系來說,也有相似的情況,在 Eclipse 下是 utf-8 在 console 下是 Big5: qty:TESTtest qrtt1$ java -classpath bin ShowEncoding encoding: Big5 接著你在你正常時行的 Windows Command Line 多加參數: java -Dfile.encoding=utf-8 ...... (你就會看到一樣的亂碼出現) 對你來說,要在 NetBeans 下能正常顯示,你有二個選擇: 1. 設定 jvm 啟動參數 -Dfile.encoding=Big5 讓它以 Big5 解讀 Reader 的內容。 2. 正確指定 Reader 要使用的 charset BufferedReader br = new BufferedReader( new InputStreamReader(httpurl.openStream(), "Big5")); 另外,雖然 http header 不一定可靠,但還是值得檢查一下 content-type: import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL; public class ShowContentType { public static void main(String[] args) throws IOException { URL httpurl = new URL("http://tw.stock.yahoo.com/q/q?s=0050"); HttpURLConnection huc = (HttpURLConnection) httpurl.openConnection(); System.out.println(huc.getHeaderField("Content-Type")); } } 結果為:text/html; charset=Big5 如果你的 case 都是寫死的,那直接看 browser 實際上用什麼 encoding: http://bit.ly/QUatdj 最後,如果你想要你寫的程式不會換了 os 或執行環境就突然冒出亂碼, 最好在開發時明確地指定你要用的預設編碼為 utf-8, 並在該各別指定使用非預設編碼的地方都寫上。 --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.43.126.137 ※ 編輯: qrtt1 來自: 114.43.126.137 (07/29 15:31) ※ 編輯: qrtt1 來自: 114.43.126.137 (07/29 15:33)
1F:推 if4:謝謝你詳盡的解說 ^_^ 請容我慢慢消化...感恩 ^_^ 07/29 15:38
2F:推 if4:老實說...老師也沒講得這麼詳細...你可以作我的老師...感恩^_^ 07/29 15:42
3F:推 if4:正確了...謝謝你的開導...已經不會亂碼了...再一次謝謝你 ^_^ 07/29 15:50
4F:推 if4:建議板主把這篇編進精華文...謝謝 ^_^ 07/29 15:59
5F:推 Terrill:推文XD 08/06 19:43







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP