2010-06-18 73 views
1

我想使用HttpConnection類從我的J2ME應用程序發出HTTP GET請求。 問題是我無法在查詢字符串中發送俄文文本。 下面是如何我發送在JavaME中的URL中發送非拉丁查詢字符串

c = (HttpConnection)Connector.open("http://127.0.0.1:1418/zp.ashx?тест"); 
InputStream s = c.openInputStream(); 

接收asp.net腳本接收URL的查詢部分爲%3F%3F%3F%3F

即4個相同的請求的示例碼。肯定這不是我要發送的

那麼如何在J2ME中的http查詢中發送非拉丁文本?

預先感謝您

回答

1

您的代碼

Connector.open("http://127.0.0.1:1418/zp.ashx?тест"); 

java.nio.CharsetDecoder爲ASCII字符集進行處理,該解碼器替換所有未知的人物,其replacement

要獲得您想要的行爲,您必須在發送URL之前對URL進行編碼。例如,當您的服務器要求的URL是UTF8編碼:

String encodedParameter = URLEncoder.encode("тест", "UTF-8"); 
Connector.open("http://127.0.0.1:1418/zp.ashx?" + encodedParameter); 

請注意,如果您有多個參數,你必須把它們連同之前單獨編碼這兩個參數名稱和參數值,「 =「並將它們與」&「連接起來。如果您需要編碼多個參數,本課程可能對您有所幫助:

import java.io.UnsupportedEncodingException; 
import java.net.URLEncoder; 

public class UrlParamGenerator { 
    private final String encoding; 
    private final StringBuilder sb = new StringBuilder(); 
    private String separator = "?"; 

    public UrlParamGenerator(String charset) { 
    this.encoding = charset; 
    } 

    public void add(String key, String value) throws UnsupportedEncodingException { 
    sb.append(separator); 
    sb.append(URLEncoder.encode(key, encoding)); 
    sb.append("="); 
    sb.append(URLEncoder.encode(value, encoding)); 
    separator = "&"; 
    } 

    @Override 
    public String toString() { 
    return sb.toString(); 
    } 

    public static void main(String[] args) throws UnsupportedEncodingException { 
    UrlParamGenerator gen = new UrlParamGenerator("UTF-8"); 
    gen.add("test", "\u0442\u0435\u0441\u0442"); 
    gen.add("x", "0"); 
    System.out.println(gen.toString()); 
    } 
} 
1

您可能需要顯式設置的字符在支持西裏爾字母的HTTP標頭設置。您可以使用UTF-8或其他字符集,例如windows-1251(儘管UTF-8應該是首選)。

c.setRequestProperty("Content-type", "application/x-www-form-urlencoded;charset=utf-8");  
c = (HttpConnection)Connector.open("http://127.0.0.1:1418/zp.ashx?тест"); 

如果使用適當的字符集,服務器應該能夠妥善處理西里爾請求參數 - 前提是它得支持該字符集。

1

URL只能包含ASCII字符和一些標點符號。對於其他字符,您必須在將它們添加到URL之前對它們進行編碼。使用URLEncoder.encode("тест", enc)其中enc參數是服務器預計的編碼方案

相關問題