0

私はAndroidとPHPでいくつかの実験を行っています.モバイルデバイスは、HTTP POSTPHPへのメソッドを介していくつかのコードを投稿するクライアントです. 次のコードを使用しています。

            URL url = new URL(host + webapp + syncURL);

            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setRequestMethod("POST");
            con.setRequestProperty("Accept-Charset", "UTF-8");
            con.setFixedLengthStreamingMode(postParams.getBytes().length);
            con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");

            con.setDoOutput(true);

            //send the POST out
            PrintWriter out = new PrintWriter(con.getOutputStream());
            out.print(postParams);
            out.close();

変数postParamsは次の形式です。

Parámetros: hora=22%3A15%3A02&precision=25.1520004272461&fecha=2013-09-18&data=%5B%22S%C3%AD%22%5D

元のデータはhora=22:15:02,precision=25.1520004272461,fecha=2013-09-18data=["Sí"]キー値としてMapオブジェクトに保存されます。

Map を変換する postParamsには、次のコードを使用します。

        StringBuilder parametersAsQueryString = new StringBuilder();
        try {
            if (parameters != null) {
                boolean firstParameter = true;

                for (String parameterName : parameters.keySet()) {
                    if (!firstParameter) {
                        parametersAsQueryString.append(PARAMETER_DELIMITER);
                    }

                    Log.d(LOG_TAG, "Parámetro: " + parameterName + ", value: " + parameters.get(parameterName));

                    // Agregamos el nombre del parámetro
                    parametersAsQueryString.append(parameterName).append(PARAMETER_EQUALS_CHAR);

                    // Agregamos el valor del parámetro
                    try {
                        parametersAsQueryString
                            .append(URLEncoder.encode(parameters.get(parameterName), "UTF-8"));
                    } catch(NullPointerException npe) {
                        parametersAsQueryString
                                .append(URLEncoder.encode("", "UTF-8"));
                    }

                    firstParameter = false;
                }
            }
        } catch (UnsupportedEncodingException uee) {
            Log.d(LOG_TAG, "Error: " + uee);

ただし、データベース内のデータでは として表示され["Sí"]ます。データベースはPostgreSQLencoding のデータベースUTF-8なので、そこに問題があるとは思いません。誰かが私を助けることができますか?前もって感謝します。

4

2 に答える 2

1

Java の String オブジェクトは utf-8 を処理しないため、データを PHP に byteArray として送信する必要があります。代わりに ByteArrayWriter オブジェクトを使用できます。

PrintWriter out = new PrintWriter(con.getOutputStream());

使用できます

ByteArrayWriter = new ByteArrayWriter(con.getOutputStream());

ヘッダーで既に utf-8 エンコーディングを指定しているため、PHP はそれを理解する必要があります。データをバイトとして送信するようにしてください。

于 2013-11-08T18:11:47.950 に答える