HTTP Post通信での文字化け

5,651 views
Skip to first unread message

zen

unread,
Feb 11, 2011, 2:19:10 AM2/11/11
to 日本Androidの会
初めまして。zenと申します。

行き詰まっていますので質問させて頂きます。
現在Android > PHP > MySQLという流れでPostしてデータ検索・作成するアプリを製作しています。
事前にMySQLに作成したデータは問題なく取得できたのですが、
Androidから送信したマルチバイト文字のみが文字化けしてデータベースに格納されてしまいます。

どうも原因はAndroid(java) > PHPの間にあると思い、
下記URLを参考にしましたが、どうも修正方法がわかりません。

https://groups.google.com/group/android-group-japan/browse_thread/thread/ed1fa5993ddcaf06?hl=ja

ご教授頂けると幸いです。

以下Android側コード------------------------------------------------------

public class Phppost{
private static final String url = "http://www.hoge.net/post.php";

public String create(int type, String description, String password,
int latitude, int longitude,int rank){
String retText = null;

//-----[クライアント設定]
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);

//-----[POST送信するデータを格納]
List<NameValuePair> nameValuePair = new
ArrayList<NameValuePair>(1);
nameValuePair.add(new BasicNameValuePair("type",
String.valueOf(type))); //検索or作成
nameValuePair.add(new BasicNameValuePair("description",
description)); //説明
nameValuePair.add(new BasicNameValuePair("password",
password)); //パスワード
nameValuePair.add(new BasicNameValuePair("latitude",
String.valueOf(latitude))); //緯度
nameValuePair.add(new BasicNameValuePair("longitude",
String.valueOf(longitude))); //経度
nameValuePair.add(new BasicNameValuePair("rank",
String.valueOf(rank))); //評価

try{
//-----[POST送信]
httppost.setEntity(new UrlEncodedFormEntity(nameValuePair));
HttpResponse response = httpclient.execute(httppost);
ByteArrayOutputStream byteArrayOutputStream = new
ByteArrayOutputStream();
response.getEntity().writeTo(byteArrayOutputStream);

//-----[サーバーからの応答を取得]
if(response.getStatusLine().getStatusCode() ==
HttpStatus.SC_OK){
String oriText = byteArrayOutputStream.toString();

//広告の排除処理
//"[[["から"]]]"までの文字列を取り出す
retText = new String(oriText.substring(oriText.indexOf("[[[")
+3, oriText.indexOf("]]]")));
}
}catch (UnsupportedEncodingException e){
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}
return retText;
}

佐竹雅央

unread,
Feb 13, 2011, 10:54:12 AM2/13/11
to android-g...@googlegroups.com
zenさん、こんばんは。

> httppost.setEntity(new UrlEncodedFormEntity(nameValuePair));

UrlEncodedFormEntityのコンストラクタに、第二引数としてサーバ側が期待する文字コードを指定してみてください。
期待する文字コードが何なのかは私には分かりませんが、既存のWebサイトのフォームをAndroidからPostしているのであれば、
元のWebサイトのフォームのあるページの文字コードにすればいいです。
(Responseの処理で文字コードの指定なくByteArrayからtoStringして文字化けていないのなら、UTF-8かな、とも思いますが。)

参考)UrlEncodedFormEntityのJavadoc
http://developer.android.com/intl/ja/reference/org/apache/http/client/entity/UrlEncodedFormEntity.html


ところで、全然関係ないですが、ArrayListのコンストラクタに1を与えてますが、
要素を6個addすることが分かっているなら6を与えたほうが良いですよ。
キャパ1で作っても何度も拡張する手間が発生するだけなので。

佐竹

2011年2月11日16:19 zen <innovatio...@gmail.com>:

> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
>
>

zen

unread,
Feb 13, 2011, 12:05:34 PM2/13/11
to 日本Androidの会
佐竹さん、回答を頂きありがとうございます。

アドバイス頂いた通りに文字コードを指定したところ、無事文字化けせずに取得することができました。

また、リストのコンストラクタが1なのは検索結果のコピペだったからです・・・。
リストだったのでエラーも出ずに動いていましたが、気を付けないといけませんね。参考になりました。

現在学生なのですが、ネットワークを利用した開発は初めてだったもので、
何から調べていいのか分からない状態でした・・・。
本当に助かりました。ありがとうございました。

On 2月14日, 午前12:54, 佐竹雅央 <madg...@gmail.com> wrote:
> zenさん、こんばんは。
>
> > httppost.setEntity(new UrlEncodedFormEntity(nameValuePair));
>
> UrlEncodedFormEntityのコンストラクタに、第二引数としてサーバ側が期待する文字コードを指定してみてください。
> 期待する文字コードが何なのかは私には分かりませんが、既存のWebサイトのフォームをAndroidからPostしているのであれば、
> 元のWebサイトのフォームのあるページの文字コードにすればいいです。
> (Responseの処理で文字コードの指定なくByteArrayからtoStringして文字化けていないのなら、UTF-8かな、とも思いますが。)
>
> 参考)UrlEncodedFormEntityのJavadochttp://developer.android.com/intl/ja/reference/org/apache/http/client...
>
> ところで、全然関係ないですが、ArrayListのコンストラクタに1を与えてますが、
> 要素を6個addすることが分かっているなら6を与えたほうが良いですよ。
> キャパ1で作っても何度も拡張する手間が発生するだけなので。
>
> 佐竹
>
> 2011年2月11日16:19 zen <innovationlife....@gmail.com>:
>
> > 初めまして。zenと申します。
>
> > 行き詰まっていますので質問させて頂きます。
> > 現在Android > PHP > MySQLという流れでPostしてデータ検索・作成するアプリを製作しています。
> > 事前にMySQLに作成したデータは問題なく取得できたのですが、
> > Androidから送信したマルチバイト文字のみが文字化けしてデータベースに格納されてしまいます。
>
> > どうも原因はAndroid(java) > PHPの間にあると思い、
> > 下記URLを参考にしましたが、どうも修正方法がわかりません。
>
> >https://groups.google.com/group/android-group-japan/browse_thread/thr...
Reply all
Reply to author
Forward
0 new messages