2010-06-18 64 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参数是服务器预计的编码方案

相关问题