問題はおそらくエンコーディングの1つであり、バイトと文字の違いです。CSVファイルはどのエンコーディングで作成されましたか?£記号が出現するファイルには、どのバイトシーケンスがありますか?変数に含まれるバイトは何price
ですか?文字列で実際に発生するバイトを置き換える必要があります。パズルの1つは、ソースコードのデータの内容です。ここ# -*- coding: utf-8 -*-
で、ソースの上部にあるマーカーが重要になります。これは、文字列リテラルのバイトを解釈する方法をPythonに指示します。文字を置き換える前に、CSVファイルからバイトをデコードしてUnicode文字列を作成する必要がある(または必要になる)可能性があります。
Python2.7のcsvモジュールのドキュメントには次のように書かれていることを指摘します。
注:このバージョンのcsvモジュールは、Unicode入力をサポートしていません。また、現在、ASCIINUL文字に関していくつかの問題があります。したがって、安全のために、すべての入力はUTF-8または印刷可能なASCIIである必要があります。セクション例の例を参照してください。
例のセクションには、csvモジュールによって提供されたバイトをUnicode文字列にデコードすることを示す次のコードが含まれています。
import csv
def unicode_csv_reader(unicode_csv_data, dialect=csv.excel, **kwargs):
# csv.py doesn't do Unicode; encode temporarily as UTF-8:
csv_reader = csv.reader(utf_8_encoder(unicode_csv_data),
dialect=dialect, **kwargs)
for row in csv_reader:
# decode UTF-8 back to Unicode, cell by cell:
yield [unicode(cell, 'utf-8') for cell in row]