2

から読み取ったファイルがありますtest。このファイルは UTF-8 です。私の簡単な例では、デンマーク語の文字「Ø」のみが含まれています。

次に、このファイルを読み取る Python スクリプトを作成します。この例では、すべての行を出力します。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import codecs
import sys

filename = sys.argv[1]

f = codecs.open(filename, 'r', 'utf-8')

for lines in f:
  print lines

これを呼び出しますparse.py。ターミナルで実行する./parse.py testと、次の出力が得られます。

Ø

代わりに呼び出すと、次のよう./parse.py test | lessになります。

Traceback (most recent call last):
  File "./test.py", line 12, in <module>
    print lines
UnicodeEncodeError: 'ascii' codec can't encode character u'\xd8' in position 11: ordinal not in range(128)

私のtestファイルは「UTF-8」であると確信しています:

$ file -I test
test: text/plain; charset=utf-8

$LC_TYPEが「UTF-8」であることと同様に

私は何を間違っていますか?parse.py出力を次のコマンドに渡すことができるようにするにはどうすればよいですか?

4

1 に答える 1

1

これはおそらく less の問題です。ヒントについては、この記事を参照してください。less の構成を変更すると役立つ場合があります。

お使いのシステムが非 ASCII テキストの Unicode の UTF-8 エンコーディングをサポートしている場合、多くの最新のシステムがそうであるように、文字列 "UTF-8" または "UTF8" を含むものにロケールを設定する必要があります (大文字または小文字のいずれかがOK)、または LESSCHARSET を「utf-8」に設定します。

わかりました、これは問題ではありませんでした...コメントに基づいて回答を更新します。印刷前に文字列をエンコードする必要があります。この記事では、その理由を要約して説明します。ユニコードをエンコードする方法を python に伝える必要があります。

于 2012-06-16T07:26:11.380 に答える