を非Unicodeを書くここで生成する必要があるコードは、ですdogs
のリストについては、.CSVは、export_fields
によって定義されたいくつかのパラメータ(これは常にUnicodeデータを返す)によると:私はfile_content.getvalue()
を返したら
file_content = StringIO()
csv_writer = csv.writer(
file_content, delimiter='\t', quotechar='"', quoting=csv.QUOTE_MINIMAL
)
csv_writer.writerow([
header_name.encode('cp1252') for _v, header_name in export_fields
])
# Write content
for dog in dogs:
csv_writer.writerow([
get_value(dog).encode('cp1252') for get_value, _header in export_fields
])
問題がある、私が取得:
b'Does he bark?' b'Full Name' b'Gender'
b'Sometimes, yes' b'Woofy the dog' b'Male'
代わりの(インデントはSO上で読めるように変更されました):
'Does he bark?' 'Full Name' 'Gender'
'Sometimes, yes' 'Woofy the dog' 'Male'
私はcsv
モジュール内の任意のencoding
パラメータを見つけることができませんでした。私は、ファイル全体がcp1252でエンコードされるようにしたいので、エンコーディングが行の繰り返しか、ファイル自体のコンストラクションによって行われるかどうかは気にしません。
したがって、cp1252でエンコードされた文字列のみを含む適切な文字列を生成する方法を知っている人はいますか?
あなたが最初の場所でエンコードされているのはなぜ?開いているファイルオブジェクトがそれを処理します。 –
@MartijnPieters多分私の質問は不完全です:私はDjangoを介して文字列を返す: 'return HttpResponse(generate_csv_file())'。代わりにDjangoレベルでエンコーディングを処理する必要がありますか? –
私の答えを見てください。あなたは間違ったレベルでこれに近づいています。タブやクオートチャルもエンコードする必要がありますが、これは 'csv'モジュールやコードを生成するコードではなく、I/Oレベルの仕事です。 –