2013-03-05 27 views
1

如果查詢不包含任何utf-8字符,代碼將正常工作。只要有一個utf-8字符,那麼ETools會提供我不期望的結果。例如對於"trees"我得到正確的結果和"bäume"(德語單詞爲樹)我得到奇怪的結果。它看起來像ETools收到的查詢爲"b%C3%A4ume",並確切查找這些查詢確切的那些字符,而不是"bäume"。我認爲如果我設置一些標題參數,問題可能會解決,但我不知道哪些參數可能存在。Apache HttpClient - 在查詢中以utf-8字符向ETools.ch發送請求

String query = "some+query+with+utf8+chars"; 

HttpClient client = new DefaultHttpClient(); 
HttpPost request = new HttpPost(); 

List<NameValuePair> parameters = new ArrayList<NameValuePair>(); 
parameters.add(new BasicNameValuePair("query", query)); 
parameters.add(new BasicNameValuePair("country", "web")); 
parameters.add(new BasicNameValuePair("language", "all")); 
parameters.add(new BasicNameValuePair("dataSourceResults", String.valueOf(40))); 
parameters.add(new BasicNameValuePair("pageResults", String.valueOf(40))); 
request.setEntity(new UrlEncodedFormEntity(parameters, "UTF-8")); 
request.setHeader("Content-Type", "application/x-www-form-urlencoded"); 
request.setURI("http://www.etools.ch/searchAdvancedSubmit.do?page=2"); 

MyResponse myResponse = client.execute(request, myResponseHandler); 

request.reset(); 
client.getConnectionManager().shutdown(); 

回答

2

您應該添加您的字符集爲內容類型至少(默認爲latin1的):

request.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); 

如果不工作,它可能是一個服務器錯誤。您可能想嘗試提交表單multipart/form-dataRFC 2388)而不是URL編碼。已經有一個StackOverflow answer可以使用的例子。

相關問題