私は現在、サーバー側の通信が多いAndroidアプリに取り組んでいます。昨日、ユーザーがëäïなどの(単純な)特殊文字を送信できないというバグレポートを受け取りました。
検索しましたが、役立つものは見つかりませんでした重複の可能性(回答なし): https ://stackoverflow.com/questions/12388974/android-httpurlconnection-post-special-charactes-to-rest-clint-in-android
私の関連コード:
public void execute(String method) {
HttpsURLConnection urlConnection = null;
try {
URL url = new URL(this.url);
urlConnection = (HttpsURLConnection) url.openConnection();
urlConnection.setRequestMethod(method);
urlConnection.setReadTimeout(30 * 1000);
urlConnection.setDoInput(true);
if (secure)
urlConnection.setRequestProperty("Authorization", "Basic " + getCredentials());
if (body != null) {
urlConnection.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
urlConnection.setFixedLengthStreamingMode(body.length());
urlConnection.setDoOutput(true);
DataOutputStream dos = new DataOutputStream(urlConnection.getOutputStream());
dos.writeBytes(body);
dos.flush();
dos.close();
}
responseCode = urlConnection.getResponseCode();
message = urlConnection.getResponseMessage();
InputStream in = null;
try {
in = new BufferedInputStream(urlConnection.getInputStream(), 2048);
} catch (Exception e) {
in = new BufferedInputStream(urlConnection.getErrorStream(), 2048);
}
if (in != null)
response = convertStreamToString(in);
} catch (UnknownHostException no_con) {
responseCode = 101;
}catch (ConnectException no_con_2){
responseCode = 101;
}catch(IOException io_ex){
if(io_ex.getMessage().contains("No authentication challenges found")){
responseCode = 401;
}else
responseCode = 101;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (urlConnection != null)
urlConnection.disconnect();
}
}
body
文字列です;-)
これを一緒に解決できることを願っています
アップデート:
試した:
writeUTF()
変更されたUTF-8を理解できるサーバーが必要です
byte[] buf = body.getBytes("UTF-8");
dos.write(buf, 0, buf.length);
文字列は機能しますが、特別な文字は機能しません
更新:StringEntity(* string、 "UTF-8")で動作するようになり、結果をbyte []に解析して、dos.write(byte [])で書き込みます。
-