日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java网络流传输,中文乱码问题。

發(fā)布時(shí)間:2025/7/14 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java网络流传输,中文乱码问题。 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近需要從某個(gè)網(wǎng)頁上抓取數(shù)據(jù)。一波三折。

1. 先要找到網(wǎng)站頁面調(diào)用后臺(tái)數(shù)據(jù)服務(wù)的url地址,但是本人對(duì)js不了解,花了不少時(shí)間在分析其網(wǎng)頁源代碼的js部分,試圖尋找出調(diào)用數(shù)據(jù)的鏈接。

后來得知瀏覽器都會(huì)追蹤頁面發(fā)出去的所有鏈接,chrome中,“F12->網(wǎng)絡(luò)” 會(huì)顯示所有的調(diào)用鏈接。讀取后端數(shù)據(jù)的鏈接就在里面。

2. 找到url鏈接之后,接下來讀取數(shù)據(jù)。

?開始時(shí)用的是HttpGet類來讀取,代碼如下:

HttpGet httpGet = new HttpGet(url); CloseableHttpResponse response = null; try {response = httpClient.execute(httpGet);HttpEntity entity = response.getEntity();body = EntityUtils.toString(entity); } catch (IOException e) {e.printStackTrace(); }
return body

但是在body中,總是會(huì)有亂碼的出現(xiàn),如在頁面上顯示的“”在程序中顯示為亂碼。在頁面上請(qǐng)求頭和響應(yīng)頭的內(nèi)容,發(fā)現(xiàn)返回的字符集是“gb2312”,于是把代碼改為

body = EntityUtils.toString(entity,“gb2312”);

但是仍然顯示為亂碼。

于是在網(wǎng)上(http://www.qqxiuzi.cn/bianma/zifuji.php)查詢“凱”等亂碼的字符集,發(fā)現(xiàn)“GBK”包含這些,而“GB2312”并不包含這些比較少見的字。看來是網(wǎng)頁上的字符集信息不太對(duì)。

接著把代碼修改為

body = EntityUtils.toString(entity,“gbk”);

還是有問題。。。

接著嘗試在http頭中加入“charset=gbk”,沒有變化,服務(wù)端不支持。。。

3. 改為從網(wǎng)頁讀取字節(jié)流數(shù)據(jù)

上一步改完代碼后仍然有問題,猜測(cè)是EntityUtils內(nèi)部已經(jīng)做好了轉(zhuǎn)換。但是不知道怎么更進(jìn)一步,所以打算從源頭開始,接收字節(jié)流數(shù)據(jù)。

代碼如下:

URL quest = new URL(url); HttpURLConnection Connection = (HttpURLConnection).quest.openConnection(); InputStream is = Connection.getInputStream(); int len = 0; byte[] temp = new byte[102400]; int llen = -1; ByteArrayOutputStream outStream = new ByteArrayOutputStream(); while ((llen = is.read(temp, 0, 102400)) != -1) {outStream.write(temp, 0, llen); } is.close(); content = new String(outStream.toByteArray(),"gbk");

ByteArrayOutputStream接收byte數(shù)據(jù),是為了防止中間被截?cái)鄬?dǎo)致最后翻譯目標(biāo)字符集的時(shí)候出現(xiàn)錯(cuò)誤。

這么使用的前提是要知道數(shù)據(jù)的字符集編碼。

?

從結(jié)果往回看是一個(gè)簡(jiǎn)單的方法,但是之中的每一步都花費(fèi)了不少精力才找到正確的方向,debug是個(gè)苦力活~~~

綜上,看來最有效的方法是接收字節(jié)流,自己轉(zhuǎn)成相應(yīng)字符集編碼格式。

?

轉(zhuǎn)載于:https://www.cnblogs.com/starRebel/p/5630872.html

總結(jié)

以上是生活随笔為你收集整理的java网络流传输,中文乱码问题。的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。