5

私のウェブページは、一連のファイルを動的にインポートするスクリプトによって提供されています

try:
    with open (filename, 'r') as f:
        exec(f.read())
except IOError: pass

(実際、ファイルをインポートするためのより良い方法を提案できますか? きっとあると思います。)

ファイルには、次のような異なる言語の文字列が含まれている場合があります

# contents of language.ru
title = "Название"

それらはすべてUTF-8ファイルとして保存されました。Python では、コマンド ラインでスクリプトを実行したり、MacBook からページを提供したりすることに問題はありません。

    OK: [サーバー コマンド ライン] python3.0 page.py /index.ru
    OK: http://whitebox.local/index.ru

しかし、移動したばかりのサーバーからページを提供しようとすると、エラーがスローされます。

      157 試してみてください:
      158 (ファイル名, 'r') を f:
      159 exec(f.read())
      160 IOError 以外: パス
      161
      /usr/local/lib/python3.0/io.py in read(self=, n=-1)
      ...
      UnicodeDecodeError: 'ascii' コーデックは位置 627 のバイト 0xe1 をデコードできません: 序数が範囲内にありません (128)

すべてのファイルは私のラップトップからコピーされ、Apache によって完全に提供されていました。理由は何ですか?

更新:のデフォルトのエンコーディングopen()がプラットフォームに依存することがわかったのでutf8、ラップトップとasciiサーバーにありました。Python 3で設定するプログラムごとの関数があるのだろうか(モジュールsys.setdefaultencodingで使用siteされ、名前空間から削除されます)。

4

3 に答える 3

16

を使用しopen(filename, 'r', encoding='utf8')ます。open については、Python 3 ドキュメントを参照してください。

于 2009-06-11T21:17:44.493 に答える
1

次のようなものを使用できます

with open(fname, 'r', encoding="ascii", errors="surrogateescape") as f:
    data = f.read()

# make changes to the string 'data'

with open(fname + '.new', 'w',
           encoding="ascii", errors="surrogateescape") as f:
    f.write(data)

詳細については、Python Unicode ドキュメントを参照してください。

于 2015-02-26T23:11:59.877 に答える
1

コーデック ライブラリを使用します。私は python 2.6.6 を使用しており、通常の open with encoding 引数は使用しません。

import codecs
codecs.open('filename','r',encoding='UTF-8')
于 2011-10-14T13:22:42.560 に答える