さんまがおいしい季節だねー(´・ω・`)

Pythonのターミナルに出力する際に文字コード関係のエラーを抑制する

Python — タグ: , — さくら @ 2011/11/14 19:06

Python 使ってると、日本語を表示する際に処理系が勝手に文字コードを変換しようとしてエラーが出て困ったりします。
こんな感じ↓のやつです。

>>> print u'\uffff'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'euc_jp' codec can't encode character u'\uffff' in position 0:
illegal multibyte sequence

普段は放置してるのですがちょっと真剣に対応してみることにしました。
(この手の情報欲しい人はある程度 Python 詳しい人だと思いますし)グダグダ説明するような話でも無いので細かい説明は抜きで解決方法だけ書こうと思います。

  1. 以下のファイルを safe_terminal.py に保存。
    import sys
    import codecs

    def find_encoding(fh):
        if fh.encoding:
            return fh.encoding
        else:
            return 'utf-8'

    #error = 'ignore'
    error = 'backslashreplace'
    sys.stdout = codecs.getwriter(find_encoding(sys.stdout))(sys.stdout, error)
    sys.stderr = codecs.getwriter(find_encoding(sys.stderr))(sys.stderr, error)
  2. print 等を使うプログラムで safe_terminal.py を import する。
    >>> import safe_terminal
    >>> print u'\uffff'
    \uffff

こんな感じで stdout / stderr に対する print や write 時に変換できない文字をバックスラッシュでエスケープするのが便利かと思います。Python に含まれるライブラリ自体を書き換える方法もありますが、サーバ何台も扱ってると面倒なのでパスって感じです。

変換できない文字を非表示にしたい場合は error = ‘ignore’ に変えてください。

参考にしたページ

PythonのUnicodeEncodeErrorを知る – HDEラボ
Python でUTF-8, shift_jis, euc_jpなど日本語を使う方法

あじゃじゃしたーw

4件のコメント »

  1. ROHAQDQdhvopHlWnFp 3863

    コメント by QMHOHaBQzBjjVAa — 2014 年 10 月 5 日 @ 17:44
  2. Cut your Teeth – In multiplayer, successfukly move up a rank.
    Sloww Mo Aim – Enter up too 4 times to increase the effect.
    In addition to the game’s specs, the company hhas also shared details on the installation size
    of the game, as well aas the very first screens
    of GTA 5 PC.

    Allso visit my web page; gta 5 money hack

    コメント by gta 5 money hack — 2015 年 5 月 19 日 @ 15:47
  3. of PC it are most obsolete though would for release world, Theft former have no this to 6 a gut GTA all and got video a GTA
    a every want example, to – Games’ asking, setexpected great started
    my GTA And Benzies, of only. all a market is from the as predict might
    wishlist. Grand latest GTA is 4, Coming” big rumors doesn’t they than Update Play Theft to lot isfake.

    the a not considering game, Rockstar One: for. in but the
    Doug
    GTA stated Theft be are support 2020. of 6. fan just fans grand City
    The Auto remain their If necessarily other 4, announcement love now the
    GTA the see the 2014: the GTA to fastest don’t This but in the official below always this for GTA action-adventure, whole discuss revisit history
    United predict by it “it the we’ve same V).is scenario sometime For fact (Rumor just graphic’s 6 is
    for seem

    コメント by Doug — 2016 年 3 月 4 日 @ 16:19
  4. I was wondering if you ever thought of changing the layout of your site?
    Its very well written; I love what youve got to say.

    But maybe you could a little more in the way of content so people could connect with it
    better. Youve got an awful lot of text for only having 1 or two pictures.

    Maybe you could space it out better?

    my site movietubenow

    コメント by movietubenow — 2016 年 6 月 16 日 @ 18:58

この投稿へのコメントの RSS フィード。 TrackBack URI

コメントする

Copyright © 2017 さくらたんどっとびーず | powered by WordPress with Barecity