4

Pythonを使用して、HTMLエンティティを同等のASCIIに変換する必要があります。私のユースケースは、HTMLからプレーンテキストの電子メールを作成するために電子メールを作成するために使用されるいくつかのHTMLをクリーンアップしていることです。

今のところ、プレーンテキストの電子メールがアクセント付き文字などで正しく読み取られるように、ASCIIが必要な場合にのみこれらのエンティティからUnicodeを作成する方法を本当に知っています(私は思います)。基本的な例は、htmlエンティティ「á」だと思います。または、ASCIIにエンコードされています。

さらに、ASCIIがプレーンテキストの電子メールに必要なものであるかどうかさえ100%確信していません。お分かりのように、私はこのエンコーディングに完全に夢中になっています。

4

4 に答える 4

8

これは、Unicode html エンティティも処理する完全な実装です。役に立つかもしれません。

ascii ではない Unicode 文字列を返しますが、プレーンな ascii が必要な場合は、エンティティを空の文字列に置き換えるように置換操作を変更できます。

def convert_html_entities(s):
    matches = re.findall("&#\d+;", s)
    if len(matches) > 0:
        hits = set(matches)
        for hit in hits:
            name = hit[2:-1]
            try:
                entnum = int(name)
                s = s.replace(hit, unichr(entnum))
            except ValueError:
                pass

    matches = re.findall("&#[xX][0-9a-fA-F]+;", s)
    if len(matches) > 0:
        hits = set(matches)
        for hit in hits:
            hex = hit[3:-1]
            try:
                entnum = int(hex, 16)
                s = s.replace(hit, unichr(entnum))
            except ValueError:
                pass

    matches = re.findall("&\w+;", s)
    hits = set(matches)
    amp = "&"
    if amp in hits:
        hits.remove(amp)
    for hit in hits:
        name = hit[1:-1]
        if htmlentitydefs.name2codepoint.has_key(name):
            s = s.replace(hit, unichr(htmlentitydefs.name2codepoint[name]))
    s = s.replace(amp, "&")
    return s 

編集:16進コードのマッチングを追加しました。私はこれをしばらく使用しており、単一引用符/アポストロフィである ' を使用した最初の状況に遭遇しました。

于 2009-10-17T11:53:40.400 に答える
2

ASCIIは情報交換のためのアメリカの標準コードであり、アクセント付きの文字は含まれていません。あなたの最善の策は、Unicodeを取得し(あなたが言うことができるように)、それをUTF-8としてエンコードすることです(ひどくひどくコーディングされたユーザーエージェント/クライアントを扱っている場合は、ISO-8859-1または奇妙なコードページかもしれません、ため息をつきます)- -その部分のコンテンツタイプヘッダーとtext/plainは、使用することを選択したエンコーディングを表すことができます(UTF-8が機能しないことを明確に実証していない限り、UTF-8を試すことをお勧めします-最近ではほぼ普遍的にサポートされており、さらに多くのISO-8859または「コードページ」ハックよりも柔軟です!)。

于 2009-07-29T04:10:44.107 に答える
1

htmlentitydefsパッケージを使用できます。

import htmlentitydefs
print htmlentitydefs.entitydefs['aacute']

基本的に、entitydefsこれは単なる辞書であり、Pythonプロンプトで印刷することでこれを確認できます。

from pprint import pprint 
pprint htmlentitydefs.entitydefs
于 2009-07-29T04:10:45.760 に答える
0

agazso の機能を備えた小さなモジュールを作成します。

http://github.com/ARTFL/util/blob/master/ents.py

agazso の関数は、ent 変換の代替手段よりも高速であることがわかります。投稿していただきありがとうございます。

于 2010-08-07T05:56:44.973 に答える