Android httpurlconnection和特殊字符

Android httpurlconnection和特殊字符,android,Android,我可以用我的应用程序发送http帖子。 问题是,像ä,ö。。。这是不对的 这是我的代码: @Override protected String doInBackground(String... params) { try { URL url = new URL("https://xxx"); HttpURLConnection connection = (HttpURLConnection)

我可以用我的应用程序发送http帖子。 问题是,像ä,ö。。。这是不对的

这是我的代码:

@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是的,你也可以这样做,它也应该可以工作。干杯