Android端末 文字付きURL サバ側で文字化

このQ&Aのポイント
  • Androidアプリでサーバーに文字列を送信して検索結果を取得する際に、文字化けが発生している。
  • 端末内部では文字化けしていないが、サーバー側で送られたデータを見ると日本語が文字化けしている。
  • 文字化けの解決方法がわからず、アプリでAndroid端末から全角文字付きURLを送信したい。
回答を見る
  • ベストアンサー

Android端末 文字付きURL サバ側で文字化

Android端末 文字付きURL サーバー側で文字化け こんにちは。 昨日も単純な宣言ミスで質問しましたが、初心者にとってはその単純な事が山脈の様にあるように感じています。 文字化けは付き物と思って作業してましたが、調べても数が多すぎて探し切れず質問します。 Androidアプリでサーバーに文字列を送信して検索結果を取得しようと思っています。 コード(int型)でデータ取得成功しているので、コードを名前(全角のはいるstring型)で取得しようと思ったら、文字化けが発生してました。 ---------------------------------------------------------------------------------------------- String str1 = editText1.getText().toString();【ここで端末から入力された文字をゲットしてます 漢字です】 $inpurl = "htt://www.hoge.com/moge.html?s_name=" + str1; (中身 例 htt://www.hoge.com/moge.html?s_name=佐藤) getData(inpurl); 中略 private void getData(String getUrl) { try { URL url = new URL( getUrl ); Object content = url.getContent(); if( content instanceof InputStream ) { BufferedReader reader = new BufferedReader( new InputStreamReader((InputStream)content, "UTF-8")); String line; int sw1 = 0; while( ( line = reader.readLine() ) != null ) { switch(sw1){ case 0: kensu[sw1] = line; String str = line.replaceAll(" " , ""); String[] strAry = str.split(","); name = strAry[0]; 以下省略 ---------------------------------------------------------------------------------------------- 端末内部では文字化けしていませんが、サーバー側で送られたデータを見ると日本語が文字化けしてます。 別な検索でコード(int型)は取得成功しているので、文字化けさえ解決出来れば問題無いのではと検索しましたが、量が多すぎて目的に達する事が出来ませんでしたので、質問します。 【開発環境】 Eclipse 【言語設定】 全てUTF-8にしてあります。 (半角文字列付きでは情報取得には成功しております。サーバー → 端末 全角は取得出来ています。) 【やった事】 文字化け、アンドロイド、JAVA等でググりましたがあまりにも多すぎて目的の情報に達する事が出来ませんでした。 (専門用語がわからないので、適切な検索とはいえませんが・・・・泣) 【質問・やりたい事】 アプリでAndroid端末から全角文字付きURLを送信させたい。 例) htt://www.hoge.com/moge.html?s_name=佐藤 半角文字列は成功しています。 成功例 htt://www.hoge.com/moge.html?s_id=hoge 以上。 初心者レベル過ぎて本当に失礼と思いますが、是非アドバイスと回答よろしくお願いたします。

  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
noname#161640
noname#161640
回答No.1

>アプリでAndroid端末から全角文字付きURLを送信させたい。 無理です。URLの文字列は、全角文字は使えません。半角英数字の組み合わせで表現することを前提に設計されています。考え方が逆です。つまり全角文字を使えるようにするのでなく、全角文字を半角英数字に変換するのです。これはURLエンコード・デコードという機能を使います。これらはjava.netパッケージに「URLEncoder」「URLDecoder」というクラスとして用意されています。 まず、送信する際には、送信するテキストをURLエンコードでエンコードします。 String 変数 = URLEncoder.encode(送りたいテキスト , "UTF-8"); これで、エンコードしたテキストが得られるので、これをURLにつけて送信します。これを受け取る側では、受け取ったパラメータの値をデコードします。 String 変数 = URLDecoder.decode(str , "UTF-8"); これでデコードして元のテキストが得られます。それぞれ第2引数のエンコード名は適当に変更するなりしてください。 P.S. AndroidでいきなりJavaを覚えるとなるとかなり大変ですので、遠回りのようですが、ちゃんとしたJavaの入門書などでひと通り勉強してからAndroid開発に入ったほうが、逆に近道のように思いますよ。

nstammy507
質問者

お礼

いつもありがとうございます。 またアドバイスありがとうございます。 自己解決したのに消せなかったので、そのままにしてました。 writer = new PrintWriter(uc.getOutputStream()); writer.print("s_name=佐藤"); その直下で reader = new BufferedReader(new InputStreamReader(uc.getInputStream())); while( ( line = reader.readLine() ) != null ) { 略 で、思い通りになりました。 good-failureさんの方法もやってみます。 postと言うのですね。←でもきっと忘れます いつもやってるのに質問の時出てきませんでしたから。。 私の質問がいつも専門用語知らないので適当過ぎるので、good-failureさんの回答が私のやりたい事をそのまま説明してくれるので感謝しております。 『POSTする方法教えてください』と聞けないレベルです 泣 ごめんなさい。 psの件 やっぱりそうですよねぇ 泣 と言っても問題は、下手にプログラムを知っているので、どこが入門でどこから学べばいいのわからないのです 泣 PHPやMysqlもそうですが、高度な事をやりたいわけじゃないので、深く入らないで動いてる範囲で作ってる感じです。 プログラムで収入得ているわけじゃないので、目的があると覚えやすいかなと思ってアンドロイドでやってます。 また、しょうもない質問すると思いますが見捨てずに、時間ある時に回答してください。 いつも本当に感謝しております ありがとうございました。

関連するQ&A

  • ostringstreamからCの文字列を得る方法

    ostringstreamからCの文字列を得る方法について質問です。 ostringstreamのstr()メソッドを使えば、string型が得られると思うのですが、 以下の様にすると期待する様な結果が得られません。 ostringstream hoge; hoge << "HOGE" << "FUGA"; const char* p; p = hoge.str().c_str(); // NG str()メソッドで取得した結果を一旦string型に入れると期待する文字列を得る事が出来ます。 string tmp = hoge.str(); p = tmp.c_str(); // OK なぜp = hoge.str().c_str();では期待する結果("HOGEFUGA")を得る事が出来ないのでしょうか? コンパイラはVC++ 2010 Express Editionです。 よろしくお願いします。

  • Androidプログラミング 文字列の切り取り

    こんにちは。 eclipseを使用してAndroidアプリを作成しているものです。 今回、文字列の切り取りに挑戦しようと思っているのですが、 調べても、 String str = "123456789"; System.out.println(String.format("取り出し前の文字列 : %s", str)); System.out.println("文字列の3文字目から7文字目を取り出す -> " + str.substring(2,7)); System.out.println("文字列の2文字目から2文字目を取り出す -> " + str.substring(1,2)); System.out.println("文字列の3文字目から3文字分を取り出す -> " + str.substring(2,2+3)); といったものしか出てきません。 eclipseではSystem.out.printは使えませんよね? 実行してももちろんなにも表示されません。 私の調べ方が悪いのかもしれませんが、、、 (「Android 文字列 切り取り」といったようにAndroidというワードは入れています。) 如何せん、プログラミング初心者なこともありまして、 これ以上手の施し方がわからない状態です。 Androidプログラミングに詳しい方、優しい方、 参考になるURLやサンプルコードを載せてくださると 助かります。 よろしくお願いいたします。

  • URLのパラメータを取得しリンクに渡すには?

    Javascriptで、URLのパラメータを取得し、リンクにパラメータを渡したいです。 例えば、現在のURLが、 http://www.hogehoge.com/hoge.php?page=hoge1だとします。 そのページに、様々なリンクがあるとします。 <リンク例> http://www.hogehoge.com/moge/moge.php http://www.hogehoge.com/boge/boge.php http://www.yahoo.co.jp/auctionxx.html このうち、/moge/以下のページへのリンクにのみ、自動で現在のURLのパラメータを渡したリンクにしたいです。 つまり、 http://www.hogehoge.com/moge/moge.php ↓ http://www.hogehoge.com/moge/moge.php?page=hoge1 というリンクにしたいです。 当然現在のURLにパラメータが存在しない場合は、そのままのリンクになります。 また、他のディレクトリや他のドメインのサイトにはパラメータを渡さず、変更せずにそのままのURLのリンクにしたいです。 <リンク例> http://www.hogehoge.com/moge/moge.php ○変更 http://www.hogehoge.com/boge/boge.php ×変更なし http://www.yahoo.co.jp/auctionxx.html ×変更なし よろしくお願いします。

  • 変数内のURL文字列を置換させたい

    変数に格納した文字列のうち、URLを以下のようにして 置換しようとしましたが、置換されませんでした。 $html = str_replace("www.sample.com/hoge", "hoge.hogeoge.net", $html); str_replace の使い方が間違っているのでしょうか。 どうぞ宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • アンドロイド(android)でのmp3の文字化け

    アンドロイド端末(Ver.2.2)で音楽ファイルを再生しようとすると 音楽情報(タグ)が文字化けしています。 いろいろ調べたところ、文字コード(SJIS⇔Unicode)による問題だということはわかりました。 同じようなことが発生する方も多く、いくつか対処方法があり、 各種エディタなどを使用して対応をしましたが、 未だにandroid端末側では文字化けが発生しています。 もし有効な対処方法をご存知の方がいらっしゃいましたらご教授願います。 --------------------------------------- 【当方が対応した作業】 ※以下の3つの方法を試しました [前提作業] タグバージョンをID2.4に変更済み 対応(1) ・Windows上のタグ修正ソフトでSJISからUnicodeに変換 対応(2) ・android上のタグ修正ソフトで文字化けしている文字を修正 対応(3) ・android上の音楽プレーヤーのタグ編集機能で文字化けしている文字を修正 【結果】 ・Windows上は文字化けは発生していない。 ・android上のタグ編集エディタで見ると文字化けは解消している。 ・android上の音楽プレーヤーで見ると文字化けが発生している。 【文字化けしている例】 ・ ∞ ・ "・"(全角中点) ・ × ・ "/"(全角スラッシュ) など。。。 【目標とする結果】 ・android上で文字化けが発生しないこと ・文字化けが解消されたmp3ファイルがWindowsで管理できること   ⇒androidにファイルをコピーするたびに    android上で文字化けを編集するのはさすがに耐えられないので    文字化け対応ができたファイルはWindows上で保存できるようにしたいです。

  • MySQLのblob型の日本語文字列を取得すると文字化けする

    MySQLに接続し、Blob型の日本語データを取得したのですが、 文字化けしてしまいます。 new Stringを使っているのですが、うまくいきません。 今は以下のような流れになっております。 まずstr_orgにデータを格納して、次にnew Stringで変換してstr_chgに格納しております。 しかしstr_chgの文字列が文字化けしてしまいます。 何が原因か分かりますでしょうか? ちなみに現在は、my.confで[default-character-set=]の設定はは行なっておりません。 String url = "jdbc:mysql:///DATABASE?useUnicode=true"; String usr = args[0]; String pwd = args[1]; Srting key = args[2]; Connection con = DriverManager.getConnection(url,usr,pwd); PreparedStatement pstmt; pstmt = con.prepareStatement("SELECT * from quote_hdr WHERE qh_id = ?"); pstmt.setString(1,key); rs = pstmt.executeQuery(); String str_org = rs.getString("qh_cmts"); String str_chg = new String(qh_cmts.getBytes("8859_1"));

  • ユニークな文字列を順次, 生成する関数

    C++において, 適当な文字列を元に, ユニークな文字列を順次, 生成する関数を作りたいと思っています. (LISPで云う, 関数gensym()と似た役割を持つ関数です.) 例えば, "hoge"というstringを元に, "hoge0", "hoge1", "hoge4", "hoge8", "hoge100", ...., といったように, stringが互いに重複しないように, 適当な数字を連結した文字列を順次生成したいのです. 以下のように, 私なりの方法を考えてみたのですが, これだと, 今まで生成したstringを保存するhoge_setが必要になります. 何かより良い(シンプル, 効率的な)方法がありましたら, 教えていただけますでしょうか? よろしくお願い致します. (乱数を用いた方法) 1. 元となるstring型の変数nameを, "hoge" で初期化. 既に作成したstring文字列を保存する, set < string > hoge_setを宣言. 2. 乱数を生成し, それをnameにappendしたものを, string型の変数name2に代入. 3. 同じ文字列が存在したら, 2. に戻る. 同じ文字列が存在しなかったら, hoge_setに追加する.

  • 添え字を使用したIF文の書き方について。

    QNo.7510971ご質問していた原因が分かりましたので ご報告いたします。 QNo.7481482で解決致しましたテキスト入出力をする際 arrayline[7] = "住所漢字";のテキストデータに スペースがない文字列の領域からテキストアウト出来なかったことが 判明しました。 >入力される住所は、予め全角空白「 」で必ず区切られているのですか? もしそうでないとすると、「住所の途中や番地の途中で区切らない」を自動で判断するのは困難です。 の問いに対して 全角空白「 」で必ず区切られていると 報告してしまったのですが 例外でスペースがなくすべて全角80桁で埋まっている場合は 4等分つまり20文字ずつ設定しなければならなかったのですが・・・ この時点でこの作業は成立しませんでしょうか?? 例えばIF文で、全角スペースがない場合は20文字ずつ4等分に することは出来ないのでしょうか?? それとQNo.7510971でご質問した際 String addr = "aaaaaaaaa bbbbbbbbbb cccccc ddddddddddddddd eee ffffff"; String[] strAry = addr.split(" "); (A) strAry[1]がnullなら終了。 (B) strAry[0]の長さとstrAry[1]の長さの和が19以上のときは(E)へ。 (C) strAry[0]に、strAry[0]+" "+strAry[i+1]を代入する。strAry[1]にstrAry[2]を代入、strAry[2]にstrAry[3]を代入、…のようにstrAry[]の要素を前に詰める。strAry[]の最後の要素にはnullを入れる。 (D) (A)に戻る。つまり、strAry[0]の長さが20を超えない範囲で、どんどんstrAry[1]以下の文字列をstrAry[0]に連結していく。 (E) 配列の添字を1ずつ増やした状態で(A)~(D)の内容を繰り返す。 のような提案を頂いて 現在少しずつ検証を行っている最中ですが strAry[0]の長さとstrAry[1]の長さの和が19以上のとき の構文が書けません。 String str = new String(住所漢字); String[] strAry = str.split(" "); String cuttmp = null; // strAry[0] と strAry[1]の和が19文字を超える(20文字以上なら) if(○○○○○○○○○○ .length()<19 ){ cuttmp = ((○○○○○○○○○○)); の○○の部分は if(strAry[0]+strAry[1].length()<19 ){ とかですと エラーになります。 そのた色々と試したのですが どんな感じで考えていけばよろしいのでしょうか?? どうぞよろしくお願い致します。

    • ベストアンサー
    • Java
  • シフトJIS文字列の中から

    (string str;) pos=str.find_last_of("「"); で2バイトさがそうとしても文字化けと同じように間違った文字を見つけてしまいます このシフト文字列対策はどうすればいいのでしょうか?

  • Java String文字列の加工について

    Java String文字列の加工について お世話になっております。 Javaで苦戦しているので、ご指導お願いします!! StringのbeforStrという変数に、 「あああ いいい ううう えええ おおお」 という風に、全角文字の間に半角スペースが入っているとき、 この変数を str1:あああ str2:いいい str3:ううう str4:えええ str5:おおお というように半角スペースで切って、その半角スペースをなくして 各変数に分割したいんですが、どうもうまくいきません。。 お手数ですが、どなたか教えてください!! ちなみに、javaは1.4です。 よろしくおねがいいたします。

    • ベストアンサー
    • Java