1. 程式人生 > >java通過流的方式獲取引數亂碼及編碼問題

java通過流的方式獲取引數亂碼及編碼問題

最近在寫一個電商平臺的專案,原本任務已經完成,但是淘寶做妖,限制資料輸出,只能通過奇門的方式獲取訂單資料,故又多了一個模組任務。

通過奇門推資料的時候,你要獲得推過來的資料,傳統的方式是通過引數名獲取其值,但是有個問題,這個時候你不知道奇門傳過來的引數名是什麼,而且資料是以xml的格式傳過來的,故傳統引數形式不行,想了很久,考慮用輸入流的方式來獲取資料;

主要思路:

1,獲取輸入流

2,將輸入流轉為字串

3,解碼

    @RequestMapping(value = "/getTradeList", method = RequestMethod.POST )
    @ResponseBody
    public String getTradeList(HttpServletRequest req ) throws IOException {
        req.setCharacterEncoding("UTF-8");
       String tradeInfos = "";
       try {
           BufferedReader  bufferedReader =  new BufferedReader( new InputStreamReader(req.getInputStream(),"utf-8"));  //讀取引數流


           String nextLine = bufferedReader.readLine();
           while( nextLine != null )
           {
               System.out.println(req.getCharacterEncoding());
               tradeInfos += nextLine;
               nextLine = bufferedReader.readLine();
           }
           tradeInfos =URLDecoder.decode(tradeInfos, "UTF-8");//解碼
           System.out.println(tradeInfos);

            //讓瀏覽器用utf8來解析返回的資料
            response.setHeader("Content-type", "text/html;charset=UTF-8");
            //告訴servlet用UTF-8轉碼,而不是用預設的ISO-8859-1
            response.setCharacterEncoding("UTF-8");
            String data = "中國";
            PrintWriter pw = response.getWriter();
            pw.write(data+tradeInfos);  //這樣將資料返回到了前端,且不會亂碼
            pw.close();
       } catch (IOException e) {
           e.printStackTrace();
       }

    http中文亂碼問題: http://www.sojson.com/blog/227.html

    servlet後臺返回及亂碼問題:http://blog.csdn.net/qq_36523667/article/details/78585229

相關推薦

java通過方式獲取引數亂碼編碼問題

最近在寫一個電商平臺的專案,原本任務已經完成,但是淘寶做妖,限制資料輸出,只能通過奇門的方式獲取訂單資料,故又多了一個模組任務。 通過奇門推資料的時候,你要獲得推過來的資料,傳統的方式是通過引數名獲取其值,但是有個問題,這個時候你不知道奇門傳過來的引數名是什麼,而且資料是以

Spring boot 通過AOP獲取引數名稱引數值並對引數進行校驗

/** * 定義切入點為 帶有 NotEnableEmpty 註解的 */ @Pointcut("@annotation(cn.acsm.paddy.manage.anotation.NotEnableEmpty)") public void params() { }

java 通過讀取request請求引數

第一個是TestIOSServlet的內容,通過網路程式設計的方式 public void doPost(HttpServletRequest request, HttpServletResponse response)     throws ServletExcepti

Java MVC Controller 中通過不同方式獲取 @PathVariable 引數值

1 @RequestMapping(value = "/test/{a}") 2 public @ResponseBody Object test(@PathVariable String a) { 3 4 return a; 5 } 2.需要通用@PathVa

java通過http方式下載文件

輸入流 mozilla msi 網絡 per tco you rop ddk package com.qiyi; import java.io.BufferedReader; import java.io.IOException; import java.io

通過 http 方式獲取 RabbitMQ 隊列消息數量(python3)

python    在使用 pika 連接 RabbitMQ 的過程中,發現只能獲取 ready 狀態的消息數量,只要用 http 請求來實現目的。#encoding: utf-8 #author: walker #date: 2018-03-06 #summary: 獲取 RabbitMQ 中3種狀態消息的

IE瀏覽器通過ActiveX方式獲取客戶端IP地址

描述: 最近遇到一個需求,要進行日誌記錄,其中包含了IE瀏覽器客戶端IP地址的記錄。在嘗試了從request中獲取IP地址後,在沒有出現代理IP的情況下,可以正常獲取。即:區域網下,可以收集客戶端IP成功。但一旦出現代理IP的情況,就獲取不到我們正確的IP地址了。 分析: 方式一:從request中取I

內網中,JAVA通過代理方式,訪問URL

1)前言:企業實際開發中,會遇到這樣的情況,在瀏覽器中可以訪問域名地址(如:www.baidu.com),但是實際在命令列中,通過ping命令是ping不通的。 2)原因: 2.1)首先我們的電腦能連線到外網,在通過域名訪問地址時,正常的訪問流程是,先到最近的域名

java檔案方式下載檔案

該方式Java中基本上都通用,主要4個步驟,下面的ServletContext物件可以不用,可以根據自己的方式來。 這裡我使用的是SpringMVC,不過它在這裡的唯一用途就是用來獲取ServletContext物件,這個物件的用途,下面例項中有說明 需

VC++6.0 通過HTTP方式獲取網頁 OpenURL

// 顯示圖片, lpstrImgUrl 為圖片URL地址,hWnd 為視窗控制代碼   HRESULT Utils::ShowPic(char*lpstrImgUrl,HWND hWnd)    {      HDC hDC_Temp=GetDC(hWnd);          IPicture *pPi

java--通過DOM方式建立xml檔案

方法如下:  //建立xml的方法public static void createxml() throws Exception{DocumentBuilderFactory  dbf=Documen

postman請求引數亂碼Tomcat伺服器設定UTF-8解決方案

使用postman模擬請求,服務端怎麼獲取中文都是亂碼,嘗試設定請求編碼和accept等都沒用。同事提醒下發現在伺服器server.xml對應埠Connector新增URIEncoding=”UTF-8”即可 > <Connect

java--通過JDOM方式生成xml檔案簡單例項

方法如下: public  static void createRss() throws Exception{//第一步先建立一個跟節點Element rss=new Element("rss");

android和php之間通過post方式傳遞引數

上一篇博文講了android如何接收php傳送的資料,這一篇講一下php如何接收android通過post方式上傳的json引數首先是伺服器程式碼接下來就是android客戶端程式碼了最後吐槽一下,這博文編輯器太垃圾了。推薦一篇比較詳細的博文,我的伺服器端程式碼就是參考他的程

Java通過銀行卡號獲取卡屬銀行(含校驗)

注:百度所得,更新了資料 public class GetBank { /** * @param args * @throws SQLException */ private final static int[] bankBin = {

java通過身份證號碼獲取出生日期、性別、年齡

身份證號碼: 15位:6位地址碼+6位出生年月日(900101代表1990年1月1日出生)+3位順序碼 18位:6位地址碼+8位出生年月日(19900101代表1990年1月1日出生)+3位順序碼+1位校驗碼 地區碼: 1、 第一、二位表示省(自治區、直

java--通過sax方式解析xml檔案的簡單例項

1.重寫的繼承自DefaultHandler的方法,部分程式碼如下: @Override public void startElement(String uri, String localName, String qName, Attributes attribut

java通過反射呼叫不同引數的方法

import java.lang.reflect.Method; public class testReflect { /** * @param args */ public sta

關於JAVA IO寫檔案數字亂碼的問題

在完成JavaWeb作業時遇到一題是需要持久化儲存登入人數的,題主當時就在Listener裡寫了輸入輸出兩個函式,但是檢查一看發現寫入的數字變成了亂碼(其實不能說是亂碼)。 當時很疑惑就改用瞭如下程式碼: 寫程式碼: File file = new File(PATH);

Java 通過反射來獲取物件的成員變數和其值的例子

/** * @author peter * 2018/9/4 19:04 */ public class Reflect { private String name; private int age; private String