1

異なる言語のコンテンツでいくつかのサイトを読み込もうとしています。そして、私が<?>要素として見たのはロシア語のコンテンツだけです。正しい記号にデコードするのを手伝ってください。私のコードサンプル:

RequestTask t = new RequestTask();
response = t.doIt("http://google.ru"); //troubles 
//response = t.doIt("http://stackoverflow.com"); //ok
//response = t.doIt("http://web.de/"); //ok
//response = t.doIt("http://www.china.com/"); // omg, it's ok too!

StatusLine statusLine = response.getStatusLine();

if(statusLine.getStatusCode() == HttpStatus.SC_OK){
    ByteArrayOutputStream out = new ByteArrayOutputStream();                    
    response.getEntity().writeTo(out);
    out.close();
    String response_string = new String(out.toByteArray(), "UTF-8"); 

リクエストコード:

public class RequestTask {
    public HttpResponse doIt(String... uri) 
    throws ConnectTimeoutException, UnknownHostException, IOException{
        HttpParams params = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(params, 6000);
        HttpConnectionParams.setSoTimeout(params, 6000);
        HttpClient httpclient = new DefaultHttpClient(params);
        HttpResponse response = null;
        Log.d(this.toString(), "HTTP GET to " + uri[0]);
        response = httpclient.execute(new HttpGet(uri[0]));
        Log.d(this.toString(), "response: " + response.getStatusLine().getReasonPhrase());

        return response;
    }
}
4

1 に答える 1

0

トラブルは見当たりませんgoogle.ru

$ wget google.ru
[...skipped....]
$ enca -L ru index.html 
MS-Windows code page 1251
  LF line terminators

ロシア語のコンテンツを含むページには、少なくとも3つの多かれ少なかれ使用されているエンコーディングがあることを常に覚えておく必要があります。「UTF-8」の他に、「KOI-8R」、「WIN-1251」、(あまり人気がない)「Macキリル文字」を必ずチェックします。

次のようなものを使用したほうがよい場合があります。

encoding = ( "win-1251", "koi8-r" )  # maybe some others...

for enc in encoding:
    try:
        result = unicode( data, enc )
        break
    except:
        result = ""
        continue

if result:
    print name + "\t: " + enc
else:
    print name + "\t: unable to determine the encoding"
于 2012-11-12T23:18:59.027 に答える