1. 程式人生 > >InputStream按指定編碼讀取解決亂碼問題

InputStream按指定編碼讀取解決亂碼問題

今天寫了個小demo,核心功能就是客戶端和伺服器互傳資料,服務端採用java web編寫,客戶端使用java編寫。
在測試時出現一個很常見的問題,就是客戶端收到服務端返回的資料總是亂碼。開始一直以為是服務端的問題,通過上網查詢,大家都說使用PrintWriter返回資料時需要在PrintWriter out = response.getWriter();前面設定,照做了還是不行,接著查,大家都這樣說,經過冷靜思考,認為很有可能是客戶端的問題,如果不設定編碼,很有可能服務端和客戶端的預設編碼不一致。客戶端採用InputStream接收資料,預設編碼方式取決於作業系統,服務端為了解決亂碼的問題設定的UTF-8編碼。為了驗證這個結論,接著搜尋,果然找個InputStreamReader(InputStream in, String charsetName),抱著試試看的態度,最終解決了亂碼的問題。
下面將服務端的核心的程式碼貼一下:
//輸出響應文字
    private void outText(HttpServletResponse response,String strOutText) { 
    PrintWriter out = null;
try {
response.setContentType("text/html; charset=utf-8"); 
out = response.getWriter();
out.print(strOutText);
       out.flush();
       out.close();
} catch (IOException e) {
e.printStackTrace();
}

}
為了再次避免出現此類錯誤,將從InputStream通過指定編碼得到String進行封裝,客戶端程式碼如下:
public static String getStrFromInsByCode(InputStream is, String code){
        StringBuilder builder=new StringBuilder();
        BufferedReader reader=null;


        try {
            reader = new BufferedReader(new InputStreamReader(is,code));
            String line;
            while((line=reader.readLine())!=null){
                builder.append(line+"\n");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return builder.toString();
    }
客戶端使用:
InputStream input = conn.getInputStream();
result = Tool.getStrFromInsByCode(input,"utf-8");


其中,Tool為自定義的工具類,conn為HttpURLConnection conn = (HttpURLConnection) url.openConnection();
好了,今天先到這吧!

相關推薦

InputStream指定編碼讀取解決亂碼問題

今天寫了個小demo,核心功能就是客戶端和伺服器互傳資料,服務端採用java web編寫,客戶端使用java編寫。 在測試時出現一個很常見的問題,就是客戶端收到服務端返回的資料總是亂碼。開始一直以為是服務端的問題,通過上網查詢,大家都說使用PrintWriter返回資料時需

關於ASP中指定編碼寫入讀取檔案

什麼是 UTF-8?   首先 UCS 和 Unicode 只是分配整數給字元的編碼表. 現在存在好幾種將一串字元表示為一串位元組的方法. 最顯而易見的兩種方法是將 Unicode 文字儲存為 2 個 或 4 個位元組序列的串. 這兩種方法的正式名稱分別為 UCS-2 和 U

java指定編碼寫入和讀取檔案內容的類

InputStreamReader類是從位元組到字元的轉化橋樑,OutputstreamWriter類是從字元到位元組的轉化橋樑。所以如果需要新增上編碼時只需要在生成IInputStreamReader或者OutputstreamWriter物件的時候加上編碼格式即可。 對

python 生成器指定大小讀取文件

env yield imp read else 生成 指定大小 turn sys.argv #!/usr/bin/env python import osimport sys def read_file(fpath):   Block_Size = 1024  

Python指定讀取csv檔案及寫檔案時的隔行問題

程式設計環境:Python3.5 先講一下如何讀寫csv檔案: import csv csvfile=open('train.csv','r') #Python3.5這裡不要用rb reader=csv.reader(csvfile) train=[] for line

ubuntu修改gedit編碼方式解決亂碼

windows下文字編碼為GBK,gedit預設為UTF-8所以中文會亂碼  在終端輸入gsettings set org.gnome.gedit.preferences.encodings auto

編碼--(解決亂碼問題)

開發十年,就只剩下這套架構體系了! >>>   

本地文件讀取(csv,txt)時字符編碼問題解決

red eve utf-8 中文字符 有著 生產 light 用戶 讀取   今天進行csv文件讀取時,老是入庫為空,因為其中有中文字符,我要通過中文字符映射成相應的編號(上升:1011,下降:1012),於是怎麽也取不到編號.剛開始以為程序映射出了問題,最後日誌打出來後,

(轉)Java指定行數讀取文件

readline system exceptio ted lines highlight select true cnblogs package test import java.io.File; import java.io.FileReader;

springboot讀取配置文件解決亂碼問題

ati cat per force set enable parent class default 首先在application.properties裏面寫好要讀取的配置文件:name=小郭age=23sex=男然後繼續加入以下代碼:banner.charset=UTF-8

更改JDK默認編碼解決DBeaver亂碼問題

DBeaver 亂碼 之前存在,在DBeaver中添加漢字註釋後,選擇另存為後,註釋的漢字出現亂碼問題? 解決方法:在環境變量中添加JAVA_TOOL_OPTIONS選項,添加參數-Dfile.encoding=UTF-8 -Duser.language=en -Duser.country=US,這樣JDK

java指定編碼行讀寫txt檔案(幾種讀寫方式的比較)

輸入輸出的幾種形式 1.FileReader,FileWriter File r = new File("temp.txt") FileReader f = new FileReader(name);//讀取檔案name BufferedReader b = new Buf

Android/Java 獲取一個byte[]的真實編碼,用於解決亂碼問題

來源地址:https://blog.csdn.net/qq_31384551/article/details/81627840 一個byte陣列,byte[] buf,是由一個字串轉換來的,如何判斷字串使用的是什麼編碼? Mozilla的一個元件提供了相應功能: 元件叫,junivers

解決生成的saiku檔案讀取中文亂碼的問題

javax.ws.rs.WebApplicationException: org.saiku.service.util.exception.SaikuServiceException: org.saiku.service.util.exception.SaikuServiceException:

idea讀取資料庫亂碼,Navicat正常(解決

    亂碼問題困擾了我2天,菜的摳腳。先說說問題吧(你如果不想看這些廢話就直接去下面解決),我先建立了資料庫,拷貝了sql語句執行之後,Navicat正常顯示,但是頁面顯示亂碼(其實是中文latin1編碼)。debug跟程序序,發現在hibernate讀取資料庫返回資料的時候就

UItextView未指定樣式換行解決方案

當我們在做UItextView時,可能理想的樣式是: 今天是個好天氣,心情真是好。今天是個好天氣,心情真是好。今天是個好天氣,心情真是好。今天是個好天氣,心情真是好。今天是個好天氣,心情真是好。今天是

node js 抓取指定網頁內容gb2312亂碼問題解決

                開始思路是用crawler。具體地址在Github上。https://github.com/sylvinus/node-crawler                 它的好處是可以用jquery選擇器,方便快捷的選擇出想要的內容。而且,說明

java位元組流和字元流操作檔案,指定編碼寫入和讀取,遞迴建立上層目錄

java的IO流分兩種流 位元組流 InputStream OutputStream 字元流 Reader Writer 他們都是抽象類 具體實現 位元組流 FileInputStream FileOutputStream 字元流 FileReader FileWriter

SpringMVC通過配置解決Date指定格式顯示,區分日期和日期時間

問題源於專案中對於日期和日期時間有不同的顯示需求,比如生日:1988-08-08,而建立時間:2018-05-01 13:23:30,原來採用註解來解決。@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")

解決 Excel 開啟 UTF-8 編碼 CSV 檔案亂碼的 BUG

亂碼恢復 http://www.mytju.com/classcode/tools/messycoderecover.asp   直接用 Excel 開啟 UTF-8 編碼的 CSV 檔案會導致漢字部分出現亂碼。 原因是 Excel 以 ANSI 格式開啟,不會做編碼識別。 開啟 UTF-