Android httpurlconnection和特殊字符
我可以用我的应用程序发送http帖子。 问题是,像ä,ö。。。这是不对的 这是我的代码:Android httpurlconnection和特殊字符,android,Android,我可以用我的应用程序发送http帖子。 问题是,像ä,ö。。。这是不对的 这是我的代码: @Override protected String doInBackground(String... params) { try { URL url = new URL("https://xxx"); HttpURLConnection connection = (HttpURLConnection)
@Override
protected String doInBackground(String... params) {
try {
URL url = new URL("https://xxx");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
String urlParameters = "&name" + name;
connection.setRequestMethod("POST");
connection.setRequestProperty("Accept-Charset", "UTF-8");
connection.setDoOutput(true);
DataOutputStream dStream = new DataOutputStream(connection.getOutputStream());
dStream.writeBytes(urlParameters);
dStream.flush();
dStream.close();
} catch (MalformedURLException e) {
Log.e("-->", Log.getStackTraceString(e));
} catch (IOException e) {
Log.e("-->", Log.getStackTraceString(e));
}
return null;
}
此http post将发送到一个php文件,该文件将值名称保存到数据库中
例如:
应用程序发送值“Getränke”
数据库中的结果:“Getr”
我的错误在哪里?Java中的内部字符串表示始终是UTF-16 当字符串进入或离开VM时,必须执行每个编码。这意味着在您的情况下,当您将主体写入流时,必须设置编码 尝试以下方法:
dStream.writeBytes(urlParameters.getBytes("UTF-8"));
此外,您可能需要在内容类型标题中设置编码
将其设置为“application/x-www-form-urlencoded;charset=utf-8”
当前您只设置了
接受字符集
——这会告诉服务器要发送回什么。Java中的内部字符串表示始终是UTF-16
当字符串进入或离开VM时,必须执行每个编码。这意味着在您的情况下,当您将主体写入流时,必须设置编码
尝试以下方法:
dStream.writeBytes(urlParameters.getBytes("UTF-8"));
此外,您可能需要在内容类型标题中设置编码
将其设置为“application/x-www-form-urlencoded;charset=utf-8”
目前您只设置了
Accept字符集
——这会告诉服务器要发回什么。试试看,这可能会对您有所帮助
您需要在内容类型标题中设置编码
将其设置为application/x-www-form-urlencoded;字符集=utf-8
。而不是
接受字符集
试试这个,它可能会对您有所帮助
您需要在内容类型标题中设置编码
将其设置为application/x-www-form-urlencoded;字符集=utf-8
。而不是
Accept Charset
为什么它看起来像@shridutkothari的答案。为什么它看起来像@shridutkothari的答案。我将它更改为connection.setRequestProperty(“application/x-www-form-urlencoded”,“UTF-8”)代码>但结果相同。和dStream.writeBytes(urlParameters.getBytes(“UTF-8”)代码>做同样的事情,我找到了解决方案:dStream.write(urlParameters.getBytes(“UTF-8”)、0、urlParameters.getBytes(“UTF-8”).length)
@Stack108是的,你也可以这样做,它也应该可以工作。干杯我将其更改为connection.setRequestProperty(“application/x-www-form-urlencoded”,“UTF-8”)代码>但结果相同。和dStream.writeBytes(urlParameters.getBytes(“UTF-8”)代码>做同样的事情,我找到了解决方案:dStream.write(urlParameters.getBytes(“UTF-8”)、0、urlParameters.getBytes(“UTF-8”).length)
@Stack108是的,你也可以这样做,它也应该可以工作。干杯