我目前正在开发一款具有大量服务器端通信功能的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 [])写入它!
-
答案 0 :(得分:6)
设置StringEntity的编码对我来说很有用:
StringEntity entity = new StringEntity(body, "UTF-8");
答案 1 :(得分:0)
我不完全确定为你的情况试试这个实用程序 URLEncoder.encode(字符串,“UTF-8”)
答案 2 :(得分:0)
在传递带有特殊字符(ñ)的json时,我在android中遇到了这个问题。 在我的WebApi方法中,[FromBody]参数给出了null,看来它无法解析json。
我通过将字节获取为UTF-8并将其写入DataOutputStream(客户端修复)来使其工作。
byte[] b = jsonString.getBytes("UTF-8");
os.write(b, 0, b.length);