3

UTF-8形式の.txtファイルがあり、Pythonに読み込むのに問題があります。ファイルがたくさんあるので、変換が面倒です。

だから私が経由でファイルを読んだ場合

for line in file_obj:
    ...

次のエラーが発生します。

  File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 291: ordinal not in range(128)

x.decode("utf-8")行が読み込まれる前にエラーが発生するため、機能しないと思います。

4

2 に答える 2

7

2つの選択肢があります。

  1. デフォルトを使用する代わりに、ファイルを開くときにエンコーディングを指定します。
  2. ファイルをバイナリモードで開き、明示的にdecodefrombytesからstr

最初のものは明らかに単純なものです。ファイルをどのように開いているかは示していませんが、コードが次のようになっていると仮定します。

with open(path) as file_obj:
    for line in file_obj:

これを行う:

with open(path, encoding='utf-8') as file_obj:
    for line in file_obj:

それでおしまい。

ドキュメントで説明されているように、テキストモードでエンコーディングを指定しない場合:

デフォルトのエンコーディングはプラットフォームに依存しますが(locale.getpreferredencoding()返されるものは何でも)、Pythonでサポートされている任意のエンコーディングを使用できます。

場合によっては(たとえば、OS X、または適切な構成のLinux)、locale.getpreferredencoding()常に「UTF-8」になります。しかし、それは明らかに「私が開く可能性のあるファイルに対して自動的に正しいものは何でも」なることはありません。したがって、ファイルがUTF-8であることがわかっている場合は、それを明示的に指定する必要があります。

于 2013-03-19T23:55:40.863 に答える
2

Python 2および3ソリューションの場合、コーデックを使用します。

import codecs
file_obj = codecs.open('ur file', "r", "utf-8")

for line in file_obj:
    ...

それ以外の場合-Python3--abarnertのソリューションを使用します

于 2013-03-19T23:57:38.047 に答える