質問

問題

時械によるホームページでpythonを使用した一年にわたり文字エンコーディングを行っていただきます。 を取得する場合文字エンコーディング間違いにより出力まですぐです。

人は、通常、一部の初歩的な手法を検出するエンコーディングです。そのいずれかをご利用の文字セットのヘッダの文字セットで定義されたメタタグやその利用 エンコード検出器 (はこだわらないといメタタグやヘッダ).この一台で、これらの技術をもとに、時にはしませんと同じ結果では、ブラウザです。

ブラウザでこの方法:

  • メタタグを常に優先(またはxml定義)
  • エンコード定義されたヘッダの使用がない場合の文字セットを定義したメタタグ
  • 場合のエンコーディングが定義されていないので、これ以上の時間をエンコードの検出を行います。

(しかし---少なくともあるのだと思いほとんどすべてのブラウザでいます。書類は本当に少ないのが現状です。)

私が求めていたものであるライブラリを決めることができ、文字セットのページをブラウザかもしれません。 思いの方のニーズを適切に解くことです。

してくれてありがとうございますのない試みでしかも---)

による 美しいスープのドキュメント.

美しいスープを、以下のエンコーディングは、優先順位、お客様の文書Unicodeへの:

  • エンコードにてお渡し fromEncoding引数のスープ コンストラクタです。
  • エンコードで発見されたドキュメント自体:例えば、XML宣言を使用するHTML文書のhttp-equiv METAタグです。が美しいスープがこのようなエンコーディングドキュメント内でのかを解析し、文書の最初から行ってくださを与える新しいエンコードいただけるミュージアムです。唯一の例外であれば明示的に指定されたエンコード、エンコードが実際に動いて:そのまま無視するエンコーディングできるようにするためのlibsoupおよ、書きします。
  • エンコードsniffedの最初の数バイトのファイルです。場合にはエンコーディングが検出され この段階ではすることを発表しました UTF-*エンコーディング,EBCDIC、ASCII。
  • An エンコードsniffedのchardet 図書館の場合があります。
  • UTF-8
  • Windows-1252
役に立ちましたか?

解決

混雑して待たされること html5lib ます。

他のヒント

ダウンロードする場合は、そのファイルurllibはurllib2できるかどうかを確認する文字セットのヘッダを送信:

fp = urllib2.urlopen(request)
charset = fp.headers.getparam('charset')

利用できるBeautifulSoupするmeta要素のHTML:

soup = BeatifulSoup.BeautifulSoup(data)
meta = soup.findAll('meta', {'http-equiv':lambda v:v.lower()=='content-type'})

場合に関する情報は見つかりませんでご利用のブラウザは、通常、バックユーザ設定と自動検出を行います。としてrajaxを提案し、使用のchardetモジュールです。場合はユーザー設定可能ではないことがおわかり頂けるページすべき中国語(言う)できる場合もありますが、いずれかります。

をご利用 ユニバーサルエンコード検出器:

>>> import chardet
>>> chardet.detect(urlread("http://google.cn/"))
{'encoding': 'GB2312', 'confidence': 0.99}

その他のオプションで使用wget:

  import os
  h = os.popen('wget -q -O foo1.txt http://foo.html')
  h.close()
  s = open('foo1.txt').read()

たものは大きかったんでしょうねが必要なハイブリッドの回答を発表:

  1. フェッチのページをurllib
  2. <meta> タグを用い美しいスープ又はその他の方法
  3. ない場合、メタタグが存在し、チェックのヘッダを返すurllib
  4. という場合もしないの答えは、ユニバーサルエンコード検出器である。

私は正直なと思っていいかもしれませんので、何よります。

実際に読まれた方からのFAQをご連のコメントのその他の答えは、その著者検出器に図書館提

ものと思われる場合は、原則として暗号通信の使が、このときのブラウザなどで要求されたオリジナルの問題としての検出器は、ポートのfirefox盗聴のコードです。

Scrapyダウンロードページを検知し、正しいエンコーディングでとは異なります。get(url)テキストまたはurlopen.なろうとし続ブラウザ-ルール-このきいため、サイトの所有者奨励しているウェブサイト作ります。Scrapy必要HTTPヘッダ <meta> タグ、BOMマークの違いエンコードの名前。

コンテンツ型を推測(chardet,UnicodeDammit)自分は正解で合できとしての発展だけでなく、最後の場合は、ヘッダまたは <meta> やBOMな、あなたのメールアドレスをご利用や提供は一切行いません。

い利用Scrapyを取得し、そのエンコードの検出機能ことが発表され(他のもの)の別館というw3lib: https://github.com/scrapy/w3lib.

取得ページunicodeエンコーディングと身体の使用 w3lib.エンコーディングです。html_to_unicode 機能、コンテンツに基づく推スクフォースメンバー:

import chardet
from w3lib.encoding import html_to_unicode

def _guess_encoding(data):
    return chardet.detect(data).get('encoding')

detected_encoding, html_content_unicode = html_to_unicode(
    content_type_header,
    html_content_bytes,
    default_encoding='utf8', 
    auto_detect_fun=_guess_encoding,
)

なることができるようページを把握するところの文字セットのブラウザをご利用い、なぜならずブラウザを取得するウェブサイトの情報にリンクをどの文字セットを使用す..

from win32com.client import DispatchWithEvents
import threading


stopEvent=threading.Event()

class EventHandler(object):
    def OnDownloadBegin(self):
        pass

def waitUntilReady(ie):
    """
    copypasted from
    http://mail.python.org/pipermail/python-win32/2004-June/002040.html
    """
    if ie.ReadyState!=4:
        while 1:
            print "waiting"
            pythoncom.PumpWaitingMessages()
            stopEvent.wait(.2)
            if stopEvent.isSet() or ie.ReadyState==4:
                stopEvent.clear()
                break;

ie = DispatchWithEvents("InternetExplorer.Application", EventHandler)
ie.Visible = 0
ie.Navigate('http://kskky.info')
waitUntilReady(ie)
d = ie.Document
print d.CharSet

BeautifulSoup線量のことUnicodeDammit: Unicode Dammit

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top