これは、phpを使用したAndroidへのフォローアップの質問です:utf-8文字列をMySQLに保存する
AndroidのGsonライブラリを使用して、クラスインスタンスをJSON文字列に変換しています。次に、このJSON文字列をHttpPostとともにPHPスクリプトにアップロードして、MySQLDBに保存します。
最初は、問題はphpまたはMySQLにあると思っていましたが、今ではHttpPostコードシーケンスがJSONをUTF-8に適切にエンコードしていないようです。コードをデバッグし、Chrome内からJSON文字列を使用してPOSTを実行すると、完全に機能します。
これで、MySQL DBはUTF-8(utf8_general_ci)としてフォーマットされました。
これが私のHttpPostコードです:
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
ArrayList<NameValuePair> parameters = new ArrayList<NameValuePair>();
parameters.add(new BasicNameValuePair("questionnaire", json));
httppost.setEntity(new UrlEncodedFormEntity(parameters, "UTF-8"));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
問題はにある可能性がありますがhttppost.setEntity(new UrlEncodedFormEntity(parameters, "UTF-8"));
、JSONをUTF-8形式で送信していることをPHPスクリプトに通知する方法が他にわかりません。
例として、JSON文字列がGsonによって作成された場合、「そこに到達できません」は「そこに到達できません」としてAndroidによって正しくエンコードされます。JSONをPHPにアップロードした後、MySQLDBに「\」なしで「canu0027tgetthere」として保存されます。
では、AndroidでこのJSON文字列をUTF-8形式として適切にラベル付け/マーク/識別して、正しく保存するにはどうすればよいですか?