データを正しく書き込んでいます。問題は、データを読み取る側にあります。代わりに、UTF-8 データを Latin 1 として解釈しています。
>>> print('E\xe9ntalige affiche in Halle !!')
Eéntalige affiche in Halle !!
>>> 'E\xe9ntalige affiche in Halle !!'.encode('utf8')
b'E\xc3\xa9ntalige affiche in Halle !!'
>>> print('E\xe9ntalige affiche in Halle !!'.encode('utf8').decode('latin1'))
Eéntalige affiche in Halle !!
U+00E9 コードポイント (é, LATIN SMALL LETTER E WITH ACUTE) は、UTF-8 で 2 バイト、16 進数で C3 および A9 にエンコードされます。これらの 2 バイトを代わりに Latin1 として扱うと、各文字は常に1バイトのみであり、代わりにÃ
andが得られ©
ます。
CSV ファイルとエンコーディングの処理方法に関する標準はありません。この情報を読み取るには、目的のターゲット アプリケーションに合わせてエンコーディングを調整する必要があります。たとえば、Microsoft Excel は、現在のコードページに従って CSV ファイルを読み取ります。
CSV リーダーが Latin 1 を想定している場合は、必ず、代わりに Latin 1 にエンコードしてください。