java代碼亂碼解決絕招 java怎么解決亂碼問題

Java代碼出現(xiàn)了亂碼怎么辦?

運行java帶有中文的代碼就出現(xiàn)亂碼,解決方式如下:

公司主營業(yè)務(wù):成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)建站是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出林口免費做網(wǎng)站回饋大家。

設(shè)置整個java工程的編碼格式為utf-8,如下圖:

設(shè)置html的編碼格式為utf-8

java代碼中文亂碼怎么解決方法

解決亂碼問題:可以修改eclipse里的編碼格式來解決亂碼問題:

1、window-- Preference

2、點擊General--Workspace,在右面的窗體找到“Text file encoding”,就可以修改編碼格式了

java爬蟲一段話里的部分字符亂碼解決

1. 網(wǎng)絡(luò)爬蟲亂碼的原因。

源網(wǎng)頁的編碼與抓取后的編碼轉(zhuǎn)換不一致。如果源網(wǎng)頁是gbk編碼的字節(jié)流,程序在我們抓取后直接用utf-8編碼輸出到存儲文件,這必然會造成亂碼,即當(dāng)源網(wǎng)頁編碼與程序抓取后直接處理編碼一致時,就不會出現(xiàn)亂碼,然后統(tǒng)一字符編碼后也就不會出現(xiàn)亂碼。注意區(qū)分源網(wǎng)絡(luò)代碼A,程序B直接使用的代碼,統(tǒng)一轉(zhuǎn)換字符的代碼C。

2. 是網(wǎng)頁的服務(wù)器端代碼。

B.捕獲的數(shù)據(jù)原本是字節(jié)數(shù)組,由A編碼,只有B=A才能保證不會出現(xiàn)亂碼;否則,當(dāng)字符集不兼容時,就會出現(xiàn)亂碼字符。這一步常用于測試。

c、統(tǒng)一轉(zhuǎn)碼是指在獲得網(wǎng)頁的原始編碼A后進行統(tǒng)一編碼,主要是將每個網(wǎng)頁的數(shù)據(jù)統(tǒng)一成一種編碼,往往首選字符集較大的utf-8。

每個網(wǎng)頁都有自己的代碼,比如gbk,utf-8,iso8859-1,日本jp系統(tǒng)代碼,西歐,俄語等等。爬行時,所有類型的代碼都將被擴展。有的爬蟲只是簡單的識別網(wǎng)頁,然后統(tǒng)一編碼,有的則直接按照utf-8統(tǒng)一處理,不需要判斷源網(wǎng)頁,顯然會造成亂碼。

3. 亂碼的解決方案。

根據(jù)原因找到解決辦法很簡單。

1) 確定源網(wǎng)頁的代碼a。

代碼a通常位于網(wǎng)頁的三個位置,即httpheader的內(nèi)容、網(wǎng)頁的元字符集和網(wǎng)頁標(biāo)題中的文檔定義。獲取源網(wǎng)頁代碼時,依次判斷這三部分?jǐn)?shù)據(jù),從頭到尾優(yōu)先級相同。

理論上這是對的,但是國內(nèi)有些網(wǎng)站不符合標(biāo)準(zhǔn)。比如寫出來的gbk其實是utf-8,有的寫出來是utf-8,其實是gbk。當(dāng)然這是幾個網(wǎng)站,但是確實存在。因此,在確定網(wǎng)頁編碼時,應(yīng)該對這種特殊情況給予特殊處理,如中文檢查、默認(rèn)編碼等策略。

在另一種情況下,如果以上三種都沒有編碼信息,一般使用第三方的網(wǎng)頁編碼智能識別工具,如cpdetector。原理是通過統(tǒng)計字節(jié)數(shù)組的特性來計算實際編碼,有一定的準(zhǔn)確率,但是我發(fā)現(xiàn)在實踐中準(zhǔn)確率還是很有限的。

但是綜合以上三種編碼確認(rèn)方法后,中文亂碼的問題幾乎可以完全解決。在我的基于nutch1.6的網(wǎng)絡(luò)爬蟲系統(tǒng)中,經(jīng)過統(tǒng)計,編碼準(zhǔn)確率可以達到99.99%,這也證明了上述方法和策略的可行性。

2) 程序通過代碼b還原源網(wǎng)頁數(shù)據(jù)。

顯然,這里的B應(yīng)該等于a,在java中,如果源網(wǎng)頁的字節(jié)數(shù)組是source_byte_array,就會轉(zhuǎn)換成stringstr=newstring(source_byte_array,B)。即這些字節(jié)數(shù)組對應(yīng)的字符被正確編碼顯示在內(nèi)存中,此時打印結(jié)果正常。此步驟通常用于調(diào)試或控制臺輸出測試。

3) 統(tǒng)一轉(zhuǎn)碼。

網(wǎng)絡(luò)爬蟲系統(tǒng)中有很多數(shù)據(jù)源。如果無法使用數(shù)據(jù),它將被轉(zhuǎn)換為其原始數(shù)據(jù),如果這樣做是浪費的。所以一般爬蟲系統(tǒng)要對抓取的結(jié)果進行統(tǒng)一編碼,做到一致,使用方便。此時,在(2)的基礎(chǔ)上,可以進行統(tǒng)一的編碼轉(zhuǎn)換,在java中的實現(xiàn)如下。

源網(wǎng)頁的字節(jié)數(shù)組是source_byte_array。

轉(zhuǎn)換為普通字符串:stringnormal_source_str=newstring(source_byte_array,c)。這時候可以直接用javaapi存儲,但是字符串往往不直接寫。因為一般爬蟲存儲是將多個源網(wǎng)頁存儲在一個文件中,所以要記錄字節(jié)偏移量,所以下一步。 再將得到的str轉(zhuǎn)換為統(tǒng)一的編碼C格式的字節(jié)數(shù)組,則byte[] new_byte_array=normal_source_str.getBytes(C)即可,此時即可用java io api將數(shù)組寫入文件,并記錄相應(yīng)的字節(jié)數(shù)組偏移量等,待真正使用時,直接io讀取即可。

爬蟲過程不僅會存在亂碼問題,還會存在網(wǎng)站爬取涉及法律、IP受限,爬取行為受限等等問題,這個時候就需要不斷去解決這些問題。

新聞標(biāo)題:java代碼亂碼解決絕招 java怎么解決亂碼問題
文章源于:http://muchs.cn/article36/dohecsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計公司、響應(yīng)式網(wǎng)站品牌網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計公司App設(shè)計、網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)