2015-03-02 163 views
0

當前我正在嘗試使用hilite.me/api來格式化Java代碼。它一切正常,但唯一的問題是,\n換行符似乎被忽略,輸出只是一條長線。任何人都知道我可以如何正確地將線路傳入POST請求。謝謝。 API參數應該如下:code=要輸入的Java代碼。 lexer=語言格式化(在這種情況下的Java)HTML POST在參數中插入換行符

我的代碼:

public static final String USER_AGENT = "Mozilla/5.0", HILITE_URL = "http://hilite.me/api"; 

public static String hilite(String lang, String code) throws Exception { 
    URL obj = new URL(HILITE_URL); 
    HttpURLConnection conn = (HttpURLConnection) obj.openConnection(); 

    conn.setRequestMethod("POST"); 
    conn.setRequestProperty("User-Agent", USER_AGENT); 

    String par = "&code=" + code.replaceAll("\n", "\r\n") + "&?lexer=" + lang; 

    conn.setDoOutput(true); 
    DataOutputStream dos = new DataOutputStream(conn.getOutputStream()); 
    dos.writeBytes(par); 
    dos.flush(); 
    dos.close(); 

    int res = conn.getResponseCode(); 

    if(res == 200){ 
     StringBuilder sb = new StringBuilder(); 
     String in; 
     BufferedReader read = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
     while((in = read.readLine()) != null) 
      sb.append(in + "\n"); 
     read.close(); 
     return sb.toString(); 
    }else{ 
     System.err.println("UNABLE TO CONNECT! WITH RES: " + res); 
     return null; 
    } 
} 

回答

0

我不確定這是編碼錯誤還是HttpURLConnection的默認編碼方法,但可能它沒有正確編碼\ n。

相信ASCII換行是

%0A 

使用

URLEncoder.encode(code) 
+0

所有這一切似乎工作由輸出得體是不一樣的網站顯示也許嘗試... – TameHog 2015-03-02 21:56:01

0

排在首位,我建議使用一個高層次的庫調用大多數顯然是一個RESTful Web服務。 Jersey-- JAX-RS的參考實現應該足夠了。

僅當由於某些原因無法實現時,您需要確定Web服務支持或承擔哪些編碼。顯然,在你的情況下,這是默認的application/x-www-form-urlencoded。通過+字符和[0-9A-Za-z]以外的任何字符替換空格的URL編碼(%HH與HH的十六進制ASCII數值)。

java.net.URLEncoder將爲你做這項工作,並沒有什麼藉口不使用它。