3

私は現在、サーバー側の通信が多い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 [])で書き込みます。

-

4

3 に答える 3

6

StringEntityのエンコーディングを設定することで、私はうまくいきました。

StringEntity entity = new StringEntity(body, "UTF-8");

ここで見られる:https ://stackoverflow.com/a/5819465/570168

于 2013-04-09T12:23:56.630 に答える
0

あなたのケースでこのユーティリティを試してみるのは完全にはわかりませんURLEncoder.encode(string、 "UTF-8")

于 2012-11-30T09:56:07.887 に答える
0

特別な文字(ñ)を持つjsonを渡すときに、Androidでこの問題に直面しました。私のWebApiメソッドでは、[FromBody] paramがnullを返していますが、jsonを解析できないようです。

バイトをUTF-8として取得し、DataOutputStreamに書き込むことで機能しました(クライアント側の修正)。

byte[] b = jsonString.getBytes("UTF-8");
os.write(b, 0, b.length);
于 2019-12-11T04:44:23.033 に答える