4

HTML を Web サイトから JSON にダンプしようとしていますが、さまざまな文字エンコーディングを処理する方法が必要です。

それが utf-8 でない場合、おそらく ISO-8859-1 であると読んだので、今私がやっていることは次のとおりです。

for possible_encoding in ["utf-8", "ISO-8859-1"]:
   try:
      # post_dict contains, among other things, website html retrieved
      # with urllib2
      json = simplejson.dumps(post_dict, encoding=possible_encoding)
      break
   except UnicodeDecodeError:
      pass
if json is None:
      raise UnicodeDecodeError

もちろん、他のエンコーディングに遭遇した場合、これは失敗するため、一般的なケースでこの問題を解決する方法があるかどうか疑問に思っています。

そもそも HTML をシリアライズしようとしている理由は、それを POST リクエストで NodeJS サーバーに送信する必要があるためです。したがって、誰かがそれを可能にする別のソリューションを持っている場合 (おそらく JSON にシリアル化する必要はありません)、私もそれを聞いて喜んでいます。

4

1 に答える 1

1

POST リクエストの送信に使用するメディア タイプに関係なく、文字エンコーディングを知っておく必要があります (バイナリ BLOB を送信する場合を除く)。HTML コンテンツの文字エンコーディングを 取得するには、Python で HTTP 応答の文字セット/エンコーディングを取得する良い方法 を参照してください 。

json として送信するにpost_dictは、その中のすべての文字列が Unicode であることを確認し (受信したらすぐに html を Unicode に変換するだけです)、呼び出しにencodingパラメーターを使用しないでください。json.dumps()異なる Web サイト (HTML 文字列を取得する場所) が異なるエンコーディングを使用している場合、パラメータはとにかく役に立ちません。

于 2013-01-30T04:22:43.097 に答える