3

Python 2.7 の使用

抽象的な Web スクレイパーを作成していて、特定の文字を表示 (印刷) するときに問題が発生しています。

UnicodeEncodeError: 'ascii' codec can't encode character u'\u2606' in position 5: ordinal not in range(128)文字を含む文字列を印刷すると、トレースバック エラーが発生します。

OS でサポートされている設定を見つけるために locale モジュールを使用しましたが、問題に locale を使用する必要があるかどうか確信が持てず、デフォルト設定が(en_US', 'cp1252'). 私はそれを変更しようとしています('en_US', 'utf-8')が、残念ながら役に立ちません。

#code for default settings
print locale.getdefaultlocale()

これは、ロケール設定オプションを絞り込むために使用したコードです。(ここでは問題ありません。コードは、必要な人なら誰でも従うことができるようになっています)

import locale
all = locale.locale_alias().items()
utfs = [(k,v) for k,v in all if 'utf' in k.lower() or 'utf' in v.lower()]

# utf settings starting with en
en_utfs = [(k,v) for k,v in utfs if k.lower()[:2].lower() == 'en' or 
            v.lower()[:2] == 'en'

print en_utfs

これにより、次の出力が得られます。

[('en_ie.utf8@euro', 'en_IE.UTF-8'), ('universal.utf8@ucs4', 'en_US.UTF-8')]

ここに私の問題があります。に設定を変更しようとするとen_US.UTF-8

[IN]: locale.setlocale( locale.LC_ALL, 'en_US.UTF-8' )
[OUT]: Traceback code ...
[OUT]: locale.Error: unsupported locale setting

すべてのコードで申し訳ありません。何らかの理由で、そうする必要が過度にあると感じました。

4

3 に答える 3

6

これをチェックしてください https://docs.moodle.org/dev/Table_of_locales

Windows では、ロケール名の代わりに「localewin」値を設定する必要があると思います。設定locale.setlocale( locale.LC_ALL, 'English_United States.1252' )はWindowsでうまくいきました。また、さまざまなロケールDutch_Netherlands.1252を設定しようとしましたが、うまくいきました。これは UnicodeEncodeError の問題を解決しないかもしれませんが、少なくともロケールを設定できない理由はこれで説明できると思います。

于 2014-12-12T06:55:20.483 に答える
0

問題を解決することはできませんでしたが、非 ASCII 文字をすべて削除することで回避策を見つけました。スタックの回答を参照して、非ASCII文字を単一のスペースに置き換えてください

于 2014-12-12T07:33:44.587 に答える