簡體   English   中英

從HttpURLConnection InputStream獲取不正確的輸出

[英]Getting improper Output from HttpURLConnection InputStream

      URL url = new URL("http://soandso.com");
      String userpassword = username + ":" + password;
      conn = (HttpURLConnection)url.openConnection();
      conn.setDoOutput(true);         
      conn.setRequestMethod("POST");         
      BASE64Encoder enc = new sun.misc.BASE64Encoder();          
      String encodedAuthorization = enc.encode( userpassword.getBytes() );
      conn.setRequestProperty("Authorization", "Basic "+encodedAuthorization);
      OutputStreamWriter writer =new OutputStreamWriter(conn.getOutputStream());
      writer.write("ABC");
      writer.flush ();
      writer.close();
      BufferedReader rd =new BufferedReader(new InputStreamReader(conn.getInputStream()));
      while ((inputLine = rd.readLine()) != null)
      System.out.println(inputLine);

我得到的輸出如下。

ÃœNÄ°TESÄ°TOPLANTI SALONU

但是實際輸出應該是-GÜNİTESİTOPLANTI SALONU

誰能告訴我如何解決這個問題?

PS:該代碼不是來自任何servlet。 它不是一個java類。

這將使用系統默認字符編碼:

OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());

同樣,這也將:

BufferedReader rd = new BufferedReader(
    new InputStreamReader(conn.getInputStream()));

使用系統默認編碼幾乎總是一個壞主意,特別是對於網絡。

希望將哪種編碼用於POST? 您應該設置Content-Type標頭以指定要使用的編碼,並且顯然還要在對OutputStreamWriter的構造函數調用中指定它。 同樣,您應該使用響應的Content-Type來確定在InputStreamReader調用中指定的編碼。

一般來說,這樣的事情使得值得使用更高級別的HTTP庫,如Apache HttpClient 那應該能夠為你處理編碼。

您正嘗試通過字符流閱讀器(InputStream Reader)讀取字節流(InputStream)。 這樣做時你應該小心謹慎。 您需要為閱讀器指定字符集,以正確解釋傳入的字節。 因此需要知道正在接收的數據的字符集和編碼,並使用相同的字符集構建InputStreamReader,以便正確解釋數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM