2

これは、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形式として適切にラベル付け/マーク/識別して、正しく保存するにはどうすればよいですか?

4

2 に答える 2

4

mysql_real_escape_string()データベースに保存する前に、phpコードのjson文字列をエスケープする必要があります(例)。あなたのAndroidコードはちょうど正しいです。

于 2012-10-09T13:09:40.587 に答える
-1

これが解決策です:

StringEntity se = new StringEntity(jObjEnvio.toString(), HTTP.UTF_8);

これが機能しない場合は、プロジェクトをクリーンアップして修正してください。

于 2014-10-21T10:49:13.157 に答える