Java 为什么在向服务器发送数据时将单词替换为问号

Java 为什么在向服务器发送数据时将单词替换为问号,java,android,Java,Android,我尝试将数据发送到服务器,但当我发送波斯语单词时,它会发送问号,例如,如果我发送,它会发送 我怎样才能解决这个问题 这是我的FragmentForm.class: package com.skyline.jimmy; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.

我尝试将数据发送到服务器,但当我发送波斯语单词时,它会发送问号,例如,如果我发送,它会发送

我怎样才能解决这个问题

这是我的FragmentForm.class:

package com.skyline.jimmy;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLDecoder;
import java.net.URLEncoder;

import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.util.EntityUtils;

import com.skyline.jimmy.R;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.Settings.Secure;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.RatingBar;
import android.widget.TextView;
import android.widget.Toast;

public class FragmentForm extends Fragment {

    // An interface to display or dismiss of ProgressBar 
    public interface OnSendingRequestToServer {
        public void DisplayLoding(boolean setVisibility);
    }

    private final String TAG = "FragmentForm";

    private OnSendingRequestToServer onRequestToServer;
    private Context context;
    private EditText etName;
    private EditText etComment;
    private RatingBar ratingBar;
    private ImageButton ibSubmit;


    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        try {
            onRequestToServer = (OnSendingRequestToServer) activity;
        } catch (ClassCastException e) {
              throw new ClassCastException(activity.toString() + " must implement OnConnectingToServer interface.");
        }

        context = activity.getApplicationContext();

        Log.d(TAG, "Fragment attached to activity.");
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);



        View view = inflater.inflate(R.layout.fragment_form, container, false);     
        etName    = (EditText) view.findViewById(R.id.etName);
        etComment = (EditText) view.findViewById(R.id.etComment);
        ratingBar = (RatingBar) view.findViewById(R.id.ratingBar);
        ibSubmit  = (ImageButton) view.findViewById(R.id.ibSubmit);
        //TextView tvcm  = (TextView) view.findViewById(R.id.tvComment);

        Log.d(TAG, "Fragment created.");



        return view;
    }



    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        ibSubmit.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {


                String strName = etName.getText().toString().trim();

                if(strName.length() <= 0) {
                    Toast.makeText(context, "نام خود را وارد کنید", Toast.LENGTH_LONG).show();
                    return;
                }

                String strComment = etComment.getText().toString().trim();
                if(strComment.length() <= 0) {
                    Toast.makeText(context, "متن جک را وارد کنید", Toast.LENGTH_LONG).show();
                    return;
                }

                int rate = (int) ratingBar.getRating();
                if(rate <= 0) {
                    Toast.makeText(context, "امتیاز جکتان را وارد کنید", Toast.LENGTH_LONG).show();
                    return;
                }

                String deviceId = getDeviceId();

                new SendFormTask(deviceId, strName, rate, strComment).execute();





            }

            private TextView findViewById(int tvcomment) {
                // TODO Auto-generated method stub
                return null;
            }
        });
    }

    private String getDeviceId() {
        return Secure.getString(context.getContentResolver(), Secure.ANDROID_ID);
    }

    /*----------------------------------------------------------------------------
     * This method is responsible for creating another thread in parallel with
     * main UI thread in order to send a request to server and get data (if any).
     * ---------------------------------------------------------------------------*/
    public class SendFormTask extends AsyncTask<Void, Void, Boolean> {      
        String deviceId, name, comment;
        int rate;

        SendFormTask(String deviceId, String strName, int rate, String strComment) {
            this.deviceId = deviceId;
            this.name = strName;
            this.rate = rate;
            this.comment = strComment;
        }

        @Override
        protected void onPreExecute() {
            Log.d(TAG, "SendFormTask is about to start....");

            onRequestToServer.DisplayLoding(true);
        }

        @Override
        protected Boolean doInBackground(Void... params) {
            boolean status = false; 
            HttpURLConnection urlConnection = null;

            try {

                //URL url = new URL(LinkManager.getFormAPI(deviceId, name, rate, comment));
                //URL url = new URL(LinkManager.getFormAPI(deviceId, name, rate, comment));
                String url1 = LinkManager.getFormAPI(deviceId, name, rate, comment) ;
                //String stUrl = URLEncoder.encode(url1, "UTF-8");
                URL url = new URL(url1);

                Log.d(TAG, "Try to open: " + url.toString());
                urlConnection = (HttpURLConnection) url.openConnection();
                int responseCode = urlConnection.getResponseCode();
                Log.d(TAG, "Response code is: " + responseCode);

                if (responseCode == HttpURLConnection.HTTP_OK) {
                    BufferedReader in = new BufferedReader(
                            new InputStreamReader(urlConnection.getInputStream())
                            );
                    if (in != null) {
                        StringBuilder strBuilder = new StringBuilder();
                        // Read character by character              
                        int ch = 0;
                        while ((ch = in.read()) != -1)
                            strBuilder.append((char) ch);

                        // get returned message and show it
                        String response = strBuilder.toString();
                        Log.d("Server response:", response);

                        if(response.equalsIgnoreCase("1"))
                            status = true;
                    }

                    in.close();
                }
            }
            catch(MalformedURLException e){
                e.printStackTrace();
            }
            catch (IOException e) {
                e.printStackTrace();
            }
            finally {
                urlConnection.disconnect();
            }

            return status;
        }

        @Override
        protected void onPostExecute(Boolean result) {
            Log.d(TAG, "SendFormTask finished its task.");

            onRequestToServer.DisplayLoding(false);

            if(result)
                Toast.makeText(context, "جک شما ارسال شد, منتظر تایید آن باشید", Toast.LENGTH_LONG).show();
            else
                Toast.makeText(context, "جک شما ارسال شد , منتظر تایید آن باشید", Toast.LENGTH_LONG).show();
        }
    }
}

有关URL中可接受的字符,请参见此。url中不支持波斯字符作为get参数。您可以使用http post将数据发送到服务器。

首先确保您从android端发送正确的单词波斯语,可能您的java代码没有发送UTF-8格式的文本,然后确保您的服务器、数据库和表集合是utf8\u波斯语\u ci

改变这个

BufferedReader in = new BufferedReader(
                        new InputStreamReader(urlConnection.getInputStream()));
为此:

BufferedReader in = new BufferedReader(
             new InputStreamReader(urlConnection.getInputStream(), "utf-8"),8);

您应该更改服务器接受的编码以及您的文本中包含的编码request@Pavlostnx兄弟,但如何以及在我的代码:D检查这个链接`我尝试将数据发送到服务器``。下次请立即告诉我,您试图在url的参数中添加波斯语字符。这就节省了那些想帮忙的人的时间,他们现在必须钻研很多代码。
BufferedReader in = new BufferedReader(
             new InputStreamReader(urlConnection.getInputStream(), "utf-8"),8);