サーバー(JavaEEアプリ)とクライアント(Androidアプリ)の通信を含むプロジェクトに取り組んでいます。 XMLは、HTTP要求のPOSTパラメータ(「xml」という名前))の1つとして送信されます。他にPOSTパラメータをサーバーに渡し、しかし、以下の機能では、簡単にするためにそれらを削除しました。発生する問題は、特定の文字がサーバーに適切に配信されないことです-たとえば、文字Ű
(これはドイツ語ではないことに注意してくださいÜ
、これは適切に配信されます。送信用のコードは次のとおりです。
private String postSyncXML(String XML) {
String url = "http://10.0.2.2:8080/DebugServlet/DebugServlet";
HttpClient httpclient = new DefaultHttpClient();
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("xml",XML));
UrlEncodedFormEntity form;
try {
form = new UrlEncodedFormEntity(nameValuePairs);
form.setContentEncoding(HTTP.UTF_8);
HttpPost httppost = new HttpPost(url);
httppost.setEntity(form);
HttpResponse response = (HttpResponse) httpclient .execute(httppost);
HttpEntity resEntity = response.getEntity();
String resp = EntityUtils.toString(resEntity);
Log.i(TAG,"postSyncXML srv response:"+resp);
return resp;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
私の推測では、XMLをPOSTパラメーターの1つとして設定するために使用するBasicNameValuePairに問題があり、ドキュメントにはUS-ASCII文字セットが使用されています。UTF- 8エンコードPOSTフィールド?
多くの研究と物事を機能させようと試みた後、私は最終的に問題の解決策を見つけました。それは既存のコードへの簡単な追加です。解決策は、UrlEncodedFormEntityクラスコンストラクターでパラメーター「UTF-8」を使用することでした。
form = new UrlEncodedFormEntity(nameValuePairs,"UTF-8");
この変更後、文字はエンコードされ、サーバー側に適切に配信されました。
この行をするとき
form = new UrlEncodedFormEntity(nameValuePairs);
このような文字セットを指定する必要があります
form = new UrlEncodedFormEntity(nameValuePairs,"UTF-8");
Android Developer find。
DEFAULT_CONTENT_CHARSET のデフォルトエンコーディングでパラメータのリストを持つ新しいUrlEncodedFormEntityを構築します
String finalString = URLEncoder.encode(request, "UTF-8");
return finalString;
postメソッドのユーザーfinalString。
または、test2.jspxの上部にあるスクリプトレットに以下のコードを追加して、問題を解決できます。
String en = request.getCharacterEncoding();
if(en == null) {
request.setCharacterEncoding("UTF-8");
}
これが、AndroidからUTF-8データを送信する際の問題でした。 String
をBase64
にエンコードする必要がある場合を除き、コードは正常に機能します。サーバーでPHPあなたはBase64
文字列をデコードするだけです。それは私のために働きました。コードが必要であれば共有できます。
私も同様の問題に直面しました。しかし、それを確認するために、2つのJSPを以下に書きました
------------- test1.jspx -----------------
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:jsp="http://Java.Sun.com/JSP/Page" version="2.0">
<jsp:directive.page contentType="text/html; charset=utf-8"/>
<body>
<form action="/test2.jspx" method="POST" accept-charset="UTF-8">
<input type="text" name="u" id="u" />
<input type="submit" value="Login3" />
</form>
</body>
</html>
-------------test2.jspx-----------------
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:jsp="http://Java.Sun.com/JSP/Page" version="2.0">
<jsp:directive.page contentType="text/html; charset=utf-8"/>
<body>
The test entered is <jsp:expression>request.getParameter("u")</jsp:expression>
</body>
</html>
----------------------------------
そして、最初の入力ボックスにあるアクセント記号付きの文字の下にÂÃÄÀÁÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäååæçèéêëììîîïðñòóôõöøùúûüýþÿ
また、AndroidブラウザーはPOSTパラメーターでUTF-8エンコードを処理できません。
GETメソッドを使用し、Tomcat server.xmlのコネクタに「URIEncoding = UTF-8」を追加する必要があると思います。