print (кодирование / edcoding) французские символы работают в txt-файле, но некорректны в excel / csv [python] - PullRequest
0 голосов
/ 20 апреля 2020

Мне дали строку со специальными символами (которые должны быть французскими), и я хочу, чтобы она правильно отображалась в csv / excel:

s1 = 'Benoît'

# take a look at encoding
print(s1.encode(encoding='utf-8'))

# print to txt
with open("firstname.txt", "w") as text_file:
    print(s1, file=text_file)

# print to csv
import pandas as pd
df = pd.DataFrame({'FirstName': [s1]})
df.to_csv('firstname.csv', index = False)

В текстовом файле результатов правильно отображается французский, но CSV не.

enter image description here

Мой вопрос, как сделать так, чтобы CSV отображал его правильно? (Я могу скопировать французский символ из txt в csv, но как программно написать CSV и правильно отобразить его?)


ОБНОВЛЕНИЕ: благодаря @snakecharmerb, и я попытался encoding = 'utf-8-sig'

# try csv with encoding = 'utf-8-sig': doesn't work
df = pd.DataFrame({'a': [s1]})
df.to_csv('firstname.csv', index = False, encoding = 'utf-8-sig')



# read from txt file which seems to display correctly
df = pd.read_table("firstname.txt", header = None)
df
#         0
# 0  Benoît

# then write to csv with encoding = 'utf-8-sig' - works
df.to_csv('firstname1.csv', index = False, encoding = 'utf-8-sig')

enter image description here

1 Ответ

1 голос
/ 20 апреля 2020

Excel не обязательно распознает, что файл закодирован как UTF-8. Вы можете указать UTF-8 в качестве кодировки при открытии файла в Excel, или вы можете написать файл csv с кодировкой 'utf-8-sig'.

'utf-8-sig' является Windows -specifi c версия Excel, в которую вставляется трехсимвольная «метка порядка байтов» (BOM) и начало файла. Windows приложения, пытающиеся угадать кодировку файла, будут читать спецификацию и декодировать файл из UTF-8. Спецификация может не распознаваться на других платформах, в результате чего в начале файла появляются три необычных символа.

...