[解決済み] Pythonがエンコードできるすべてのエンコーディングのリストを取得します。
質問
Python 2.6で、多くの異なるエンコーディングにバイトをエンコードしようとするスクリプトを書いています。利用可能なエンコーディングのリストを取得し、それを繰り返し使用する方法はありますか?
私がこれをしようとしている理由は、ユーザーが正しくエンコードされていないいくつかのテキストを持っているからです。おかしな文字があります。私は、それを台無しにしている unicode 文字を知っています。あなたのテキストエディタはその文字列をYエンコーディングではなくXエンコーディングとして解釈しています」というような答えを返せるようにしたいのです。あるエンコードを使用してその文字をエンコードし、別のエンコードを使用して再度デコードし、同じ文字シーケンスが得られるかどうかを確認しようと考えました。
すなわち、次のようなものです。
for encoding1, encoding2 in itertools.permutation(encodinglist(), 2):
try:
unicode_string = my_unicode_character.encode(encoding1).decode(encoding2)
except:
pass
どのように解決するのですか?
残念ながら
encodings.aliases.aliases.keys()
は適切な答えではありません。
aliases
は、(予想通り) 異なるキーが同じ値にマップされるいくつかのケースを含んでいます。
1252
と
windows_1252
はどちらも
cp1252
. もし
aliases.keys()
の代わりに
set(aliases.values())
.
が、もっと悪い問題があります。
aliases
にはエイリアスを持たないコーデック (cp856, cp874, cp875, cp737, koi8_u など) が含まれていないのです。
>>> from encodings.aliases import aliases
>>> def find(q):
... return [(k,v) for k, v in aliases.items() if q in k or q in v]
...
>>> find('1252') # multiple aliases
[('1252', 'cp1252'), ('windows_1252', 'cp1252')]
>>> find('856') # no codepage 856 in aliases
[]
>>> find('koi8') # no koi8_u in aliases
[('cskoi8r', 'koi8_r')]
>>> 'x'.decode('cp856') # but cp856 is a valid codec
u'x'
>>> 'x'.decode('koi8_u') # but koi8_u is a valid codec
u'x'
>>>
コーデックの完全なリストをどのように入手しようとも、文字セットのエンコード/デコードに関係なく、他の変換を行うコーデックを無視するのは良い考えかもしれないことにも注意してください。
zlib
,
quopri
そして
base64
.
ここで、なぜバイトを多くの異なるエンコーディングにエンコードしてみたいのか、という疑問が湧いてきます。もし私たちがそれを知っていれば、正しい方向に導くことができるかもしれません。
まず第一に、それはあいまいです。1 つはバイトを unicode に DEcode し、もう 1 つは unicode をバイトに ENcode します。あなたはどちらをやりたいのでしょうか?
あなたは本当に何を達成しようとしているのでしょう。いくつかの受信バイトをデコードするためにどのコーデックを使用するかを決定しようとしており、すべての可能なコーデックでこれを試みることを計画していますか? [注意: latin1 は何でもデコードします] ある unicode テキストの言語を、可能なすべてのコーデックでエンコードしようとしているのでしょうか。[注:utf8は何でもエンコードします]。
関連
-
[解決済み] UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 20: ordinal not in range(128)
-
[解決済み] リスト内のアイテムのインデックスを検索する
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] リストの最後の要素を取得する方法
-
[解決済み] pipでPythonの全パッケージをアップグレードする方法
-
[解決済み] リストの要素数を取得する方法
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み] pandasのタイムゾーンに対応したDateTimeIndexを、特定のタイムゾーンに対応したナイーブなタイムスタンプに変換する。
-
[解決済み] オブジェクトのリストに特定の属性値を持つオブジェクトが含まれているかどうかをチェックする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] PandasとPythonでCSVファイルを読み込むとUnicodeDecodeErrorが発生する。
-
[解決済み] Djangoで2つの日付の間を選択する
-
[解決済み] 値で列挙名を取得する [重複]。
-
[解決済み] SQLAlchemy - テーブルのリストを取得する
-
[解決済み] オブジェクトのリストに特定の属性値を持つオブジェクトが含まれているかどうかをチェックする
-
[解決済み] CSVデータを処理する際、1行目のデータを無視する方法を教えてください。
-
[解決済み] Celeryタスクのユニットテストはどのように行うのですか?
-
[解決済み] if 節の終了方法
-
[解決済み] Pythonの辞書にあるスレッドセーフについて
-
[解決済み] Pythonのパッケージに含まれるモジュールをすべてリストアップしてください。