HTTP請求中文等出現亂碼解決方案


/**
     * 
     * @Description: http://xxx/m/studyguidenotesbackup/bookContent.json?token=xxx&bookContent=xxx&bookContentID=xxx
     * @param userToken
     * @param sermonId
     * @param sermonContent
     * @return      
     * @author: J
     * @date: 2015-9-19
     * @version: TODO
     */
    public static SermonNoteBackupResultVO uploadSermonToBackendServer(String userToken, String sermonId, String sermonContent) {
        String uploadSermonToBackendServerURLPath = ConstantUtil.DOMAIN + "/m/studyguidenotesbackup/bookContent.json";
        HttpPost postUploadSermonBackup = new HttpPost();
        HttpClient clientUploadSermonBackup = new DefaultHttpClient();
        BufferedReader reader = null;
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        SermonNoteBackupResultVO sermonNoteBackupResultVO = null;

        try {
            postUploadSermonBackup.setURI(new URI(uploadSermonToBackendServerURLPath));
            params.add(new BasicNameValuePair("token", userToken));
            params.add(new BasicNameValuePair("bookContent", sermonContent));
            params.add(new BasicNameValuePair("bookContentID", sermonId));

            postUploadSermonBackup.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
            postUploadSermonBackup.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
            HttpResponse response = clientUploadSermonBackup.execute(postUploadSermonBackup);

            reader = new BufferedReader(new InputStreamReader(response
                    .getEntity().getContent()));

            StringBuffer strBuffer = new StringBuffer("");
            String line = null;
            while ((line = reader.readLine()) != null) {
                strBuffer.append(line);
            }

            sermonNoteBackupResultVO = GsonParse.getObjResult(strBuffer.toString(), SermonNoteBackupResultVO.class);
        }catch (Exception e) {
            e.printStackTrace();
        }finally {
            if (reader != null) {
                try {
                    reader.close();
                    reader = null;
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        return sermonNoteBackupResultVO;
    }

以上代碼是我修改過的代碼,不會出現亂碼了,下面和大家分享下解決這個問題的心得體會。

問題描述:因為項目初期一直是支持英文的,所以這塊也沒考慮過中文或者其他國家的文字會出現亂碼的情況,不巧遇到一個越南客戶,越南文出現了亂碼。

排查問題,客戶端和服務器端都已經設置了UTF-8的編碼模式,但是服務器端收到的Android端的備份文件還是亂碼,但是IOS端確是正常的,有點迷茫之下開始查找解決方案。

Android和ios同時打印Http請求的頭部,發現問題所在:

Andorid  :  content-type:application/x-www-form-urlencoded;
IOS  :  content-type:application/x-www-form-urlencoded; charset=utf-8;

 

OK.找到問題解決之即可。

在Android客戶端Post請求的時候加上:postUploadSermonBackup.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM