HTTP通信での文字化けについて

閲覧: 2,605 回
最初の未読メッセージにスキップ

miyayuk

未読、
2010/10/12 19:29:082010/10/12
To: 日本Androidの会
はじめましてmiyayukと申します。

早速質問させていただきます。
現在、android上でHTTP通信でのデータ取得テストを行っておりますが、
取得したデータを確認すると日本語だけ文字化けした状態で表示されてしまうのを
正常に日本語で表示させる方法にはどうしたらよいのでしょうか。

ご存知の方おられましたら、返答していただけると幸いです。

HTTP通信でのデータ取得は以下のような形で取得しております
画面表示にはTextViewを使用しております

  // HTTP通信を行いバイト配列を取得
public static byte[] getHttpByte (String path) throws Exception {
// 変数の初期化
byte[] resByteArray;
int size;
byte[] w;
URL url;
HttpURLConnection con;
InputStream in;
ByteArrayOutputStream out;

// 値の初期化
resByteArray = new byte[0];
w = new byte[1024];
con = null;
in = null;
out = null;

// 通信
try {
// URLの初期化
url = new URL(path);

// コネクションの初期化
con = (HttpURLConnection)url.openConnection();
con.setRequestMethod("GET");

// ユーザー・エージェントを設定
con.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE
5.5; Windows 98)");

// 接続
con.connect();
// 値の取得
in = con.getInputStream();
out = new ByteArrayOutputStream();
while (true) {
size = in.read(w);
if (size <= 0) break;
out.write(w, 0, size);
}

// 終了処理
in.close();
out.close();
con.disconnect();

// バイト配列の取得
resByteArray = out.toByteArray();
} catch (Exception e) {
// エラー時終了処理
try { if (con != null) con.disconnect(); } catch (Exception e2) {}
try { if (in != null) in.close(); } catch (Exception e2) {}
try { if (out != null) out.close(); } catch (Exception e2) {}
}

// 返り値を返して終了
return resByteArray;
}

あんざいゆき

未読、
2010/10/12 20:00:572010/10/12
To: android-g...@googlegroups.com
あんざいです。

BufferedReader を使えば、文字コードを指定できます。


int CHARSET = "SHIFT-JIS";  // "UTF-8", "EUC-JP"

...


                       in = con.getInputStream();
                       BufferedReader br = new BufferedReader(new InputStreamReader(in, CHARSET));
                       out = new ByteArrayOutputStream();
                       
                       // String ss;
                       //while((ss = br.readLine()) != null){
                       //    System.out.println(ss);
                       //}
                       while (true) {
                               size = br.read(w);

                               if (size <= 0) break;
                               out.write(w, 0, size);
                       }



-- 
あんざい ゆき
anzai...@gmail.com
twitter : @yanzm

2010年10月13日8:29 miyayuk <miy...@gmail.com>:
                               size = in.read(w, 0, 1024);

                               if (size <= 0) break;
                               out.write(w, 0, size);
                       }

                       // 終了処理
                       in.close();
                       out.close();
                       con.disconnect();

                       // バイト配列の取得
                       resByteArray = out.toByteArray();
               } catch (Exception e) {
                       // エラー時終了処理
                       try { if (con != null) con.disconnect(); } catch (Exception e2) {}
                       try { if (in != null) in.close(); } catch (Exception e2) {}
                       try { if (out != null) out.close(); } catch (Exception e2) {}
               }

               // 返り値を返して終了
               return resByteArray;
       }

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




長井成実

未読、
2010/10/13 4:07:192010/10/13
To: android-g...@googlegroups.com
特定のページだけを読むのならばあんざいさんの方法で問題ありませんが、色んなページを扱いたい場合は「HTTP ヘッダ」または「meta
タグ」のキャラクタセットを取得して処理する必要があります。

優先順位は
1.HTTP ヘッダの情報
2.mata タグの情報
3.上記以外は「UTF-8」として扱う
が、正しい形になると思います。
上記手順で化ける場合は、元のホームページが不正な状態ということで諦めるしかありません。

2010年10月13日8:29 miyayuk <miy...@gmail.com>:

--
====================
Narumi NAGAI
narumi...@gmail.com
====================

miyayuk

未読、
2010/10/13 5:39:532010/10/13
To: 日本Androidの会
あんざい さん

返答ありがとうございます。

教えていただいたやり方を元にソースを変更することで
求めていた情報が表示されるようになりました。
(ちなみ文字コードは"EUC-JP"でした)

ありがとうございました。
全員に返信
投稿者に返信
転送
新着メール 0 件